From b5de07474d05ff2249af24c086a8ed9b13e8d449 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 16 Aug 2024 08:30:09 +0000 Subject: [PATCH 01/32] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 09ae79a..9f1d33f 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,8 @@ "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.3.2" + "@stdlib/types": "^0.3.2", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-filled": "^0.2.1", @@ -105,4 +106,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From d4ff8136d07822573bf9682a948a00bc5076528a Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 16 Aug 2024 08:31:15 +0000 Subject: [PATCH 02/32] 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 | 49 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 51 +- SECURITY.md | 5 - .../benchmark.10d_blocked_columnmajor.js | 152 - benchmark/benchmark.10d_blocked_rowmajor.js | 152 - benchmark/benchmark.10d_columnmajor.js | 152 - benchmark/benchmark.10d_rowmajor.js | 152 - benchmark/benchmark.11d_columnmajor.js | 152 - benchmark/benchmark.11d_rowmajor.js | 152 - benchmark/benchmark.1d_columnmajor.js | 141 - benchmark/benchmark.1d_rowmajor.js | 141 - benchmark/benchmark.2d_blocked_columnmajor.js | 153 - benchmark/benchmark.2d_blocked_rowmajor.js | 153 - benchmark/benchmark.2d_columnmajor.js | 153 - benchmark/benchmark.2d_rowmajor.js | 154 - benchmark/benchmark.2d_rowmajor_accessors.js | 181 - ...benchmark.2d_rowmajor_accessors_complex.js | 188 - benchmark/benchmark.3d_blocked_columnmajor.js | 153 - benchmark/benchmark.3d_blocked_rowmajor.js | 153 - benchmark/benchmark.3d_columnmajor.js | 153 - benchmark/benchmark.3d_rowmajor.js | 153 - benchmark/benchmark.4d_blocked_columnmajor.js | 152 - benchmark/benchmark.4d_blocked_rowmajor.js | 152 - benchmark/benchmark.4d_columnmajor.js | 152 - benchmark/benchmark.4d_rowmajor.js | 152 - benchmark/benchmark.5d_blocked_columnmajor.js | 152 - benchmark/benchmark.5d_blocked_rowmajor.js | 152 - benchmark/benchmark.5d_columnmajor.js | 152 - benchmark/benchmark.5d_rowmajor.js | 152 - benchmark/benchmark.6d_blocked_columnmajor.js | 152 - benchmark/benchmark.6d_blocked_rowmajor.js | 152 - benchmark/benchmark.6d_columnmajor.js | 152 - benchmark/benchmark.6d_rowmajor.js | 152 - benchmark/benchmark.7d_blocked_columnmajor.js | 152 - benchmark/benchmark.7d_blocked_rowmajor.js | 152 - benchmark/benchmark.7d_columnmajor.js | 152 - benchmark/benchmark.7d_rowmajor.js | 152 - benchmark/benchmark.8d_blocked_columnmajor.js | 152 - benchmark/benchmark.8d_blocked_rowmajor.js | 152 - benchmark/benchmark.8d_columnmajor.js | 152 - benchmark/benchmark.8d_rowmajor.js | 152 - benchmark/benchmark.9d_blocked_columnmajor.js | 152 - benchmark/benchmark.9d_blocked_rowmajor.js | 152 - benchmark/benchmark.9d_columnmajor.js | 152 - benchmark/benchmark.9d_rowmajor.js | 152 - branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 19 - dist/index.js.map | 7 - docs/repl.txt | 78 - docs/types/test.ts | 128 - examples/index.js | 50 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/0d.js | 100 - lib/0d_accessors.js | 121 - lib/10d.js | 280 - lib/10d_accessors.js | 305 -- lib/10d_blocked.js | 389 -- lib/10d_blocked_accessors.js | 414 -- lib/1d.js | 129 - lib/1d_accessors.js | 154 - lib/2d.js | 166 - lib/2d_accessors.js | 191 - lib/2d_blocked.js | 195 - lib/2d_blocked_accessors.js | 220 - lib/3d.js | 180 - lib/3d_accessors.js | 205 - lib/3d_blocked.js | 221 - lib/3d_blocked_accessors.js | 246 - lib/4d.js | 194 - lib/4d_accessors.js | 219 - lib/4d_blocked.js | 245 - lib/4d_blocked_accessors.js | 270 - lib/5d.js | 208 - lib/5d_accessors.js | 233 - lib/5d_blocked.js | 269 - lib/5d_blocked_accessors.js | 294 - lib/6d.js | 224 - lib/6d_accessors.js | 249 - lib/6d_blocked.js | 293 - lib/6d_blocked_accessors.js | 318 -- lib/7d.js | 238 - lib/7d_accessors.js | 263 - lib/7d_blocked.js | 317 -- lib/7d_blocked_accessors.js | 342 -- lib/8d.js | 252 - lib/8d_accessors.js | 277 - lib/8d_blocked.js | 341 -- lib/8d_blocked_accessors.js | 366 -- lib/9d.js | 266 - lib/9d_accessors.js | 291 - lib/9d_blocked.js | 365 -- lib/9d_blocked_accessors.js | 390 -- lib/index.js | 81 - lib/main.js | 342 -- lib/nd.js | 154 - lib/nd_accessors.js | 179 - package.json | 82 +- stats.html | 4842 +++++++++++++++++ test/dist/test.js | 33 - test/test.js | 35 - 125 files changed, 4872 insertions(+), 21180 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.10d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.10d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.10d_columnmajor.js delete mode 100644 benchmark/benchmark.10d_rowmajor.js delete mode 100644 benchmark/benchmark.11d_columnmajor.js delete mode 100644 benchmark/benchmark.11d_rowmajor.js delete mode 100644 benchmark/benchmark.1d_columnmajor.js delete mode 100644 benchmark/benchmark.1d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.2d_columnmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors_complex.js delete mode 100644 benchmark/benchmark.3d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.3d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.3d_columnmajor.js delete mode 100644 benchmark/benchmark.3d_rowmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.4d_columnmajor.js delete mode 100644 benchmark/benchmark.4d_rowmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.5d_columnmajor.js delete mode 100644 benchmark/benchmark.5d_rowmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.6d_columnmajor.js delete mode 100644 benchmark/benchmark.6d_rowmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.7d_columnmajor.js delete mode 100644 benchmark/benchmark.7d_rowmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.8d_columnmajor.js delete mode 100644 benchmark/benchmark.8d_rowmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.9d_columnmajor.js delete mode 100644 benchmark/benchmark.9d_rowmajor.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 (97%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/0d.js delete mode 100644 lib/0d_accessors.js delete mode 100644 lib/10d.js delete mode 100644 lib/10d_accessors.js delete mode 100644 lib/10d_blocked.js delete mode 100644 lib/10d_blocked_accessors.js delete mode 100644 lib/1d.js delete mode 100644 lib/1d_accessors.js delete mode 100644 lib/2d.js delete mode 100644 lib/2d_accessors.js delete mode 100644 lib/2d_blocked.js delete mode 100644 lib/2d_blocked_accessors.js delete mode 100644 lib/3d.js delete mode 100644 lib/3d_accessors.js delete mode 100644 lib/3d_blocked.js delete mode 100644 lib/3d_blocked_accessors.js delete mode 100644 lib/4d.js delete mode 100644 lib/4d_accessors.js delete mode 100644 lib/4d_blocked.js delete mode 100644 lib/4d_blocked_accessors.js delete mode 100644 lib/5d.js delete mode 100644 lib/5d_accessors.js delete mode 100644 lib/5d_blocked.js delete mode 100644 lib/5d_blocked_accessors.js delete mode 100644 lib/6d.js delete mode 100644 lib/6d_accessors.js delete mode 100644 lib/6d_blocked.js delete mode 100644 lib/6d_blocked_accessors.js delete mode 100644 lib/7d.js delete mode 100644 lib/7d_accessors.js delete mode 100644 lib/7d_blocked.js delete mode 100644 lib/7d_blocked_accessors.js delete mode 100644 lib/8d.js delete mode 100644 lib/8d_accessors.js delete mode 100644 lib/8d_blocked.js delete mode 100644 lib/8d_blocked_accessors.js delete mode 100644 lib/9d.js delete mode 100644 lib/9d_accessors.js delete mode 100644 lib/9d_blocked.js delete mode 100644 lib/9d_blocked_accessors.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js delete mode 100644 lib/nd.js delete mode 100644 lib/nd_accessors.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.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 00c9c4d..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/ndarray/base/map) 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 0696b91..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/ndarray/base/map) 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 1c89592..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: '29 17 * * 1' - - # 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 + + ```
@@ -214,7 +205,7 @@ console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); ## 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.10d_blocked_columnmajor.js b/benchmark/benchmark.10d_blocked_columnmajor.js deleted file mode 100644 index 4a5554b..0000000 --- a/benchmark/benchmark.10d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_blocked_rowmajor.js b/benchmark/benchmark.10d_blocked_rowmajor.js deleted file mode 100644 index 0aa2c3b..0000000 --- a/benchmark/benchmark.10d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_columnmajor.js b/benchmark/benchmark.10d_columnmajor.js deleted file mode 100644 index 618133f..0000000 --- a/benchmark/benchmark.10d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_rowmajor.js b/benchmark/benchmark.10d_rowmajor.js deleted file mode 100644 index 74fe650..0000000 --- a/benchmark/benchmark.10d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_columnmajor.js b/benchmark/benchmark.11d_columnmajor.js deleted file mode 100644 index e02b5a2..0000000 --- a/benchmark/benchmark.11d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_rowmajor.js b/benchmark/benchmark.11d_rowmajor.js deleted file mode 100644 index d6dd1e1..0000000 --- a/benchmark/benchmark.11d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_columnmajor.js b/benchmark/benchmark.1d_columnmajor.js deleted file mode 100644 index 2b598cf..0000000 --- a/benchmark/benchmark.1d_columnmajor.js +++ /dev/null @@ -1,141 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_rowmajor.js b/benchmark/benchmark.1d_rowmajor.js deleted file mode 100644 index 3cd6bfa..0000000 --- a/benchmark/benchmark.1d_rowmajor.js +++ /dev/null @@ -1,141 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_columnmajor.js b/benchmark/benchmark.2d_blocked_columnmajor.js deleted file mode 100644 index 8505a3e..0000000 --- a/benchmark/benchmark.2d_blocked_columnmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_rowmajor.js b/benchmark/benchmark.2d_blocked_rowmajor.js deleted file mode 100644 index c98854c..0000000 --- a/benchmark/benchmark.2d_blocked_rowmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_columnmajor.js b/benchmark/benchmark.2d_columnmajor.js deleted file mode 100644 index c641421..0000000 --- a/benchmark/benchmark.2d_columnmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor.js b/benchmark/benchmark.2d_rowmajor.js deleted file mode 100644 index 3dafe67..0000000 --- a/benchmark/benchmark.2d_rowmajor.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors.js b/benchmark/benchmark.2d_rowmajor_accessors.js deleted file mode 100644 index 0a7dd4c..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors.js +++ /dev/null @@ -1,181 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf[ idx ]; -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf[ idx ] = value; -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors_complex.js b/benchmark/benchmark.2d_rowmajor_accessors_complex.js deleted file mode 100644 index 32b696d..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors_complex.js +++ /dev/null @@ -1,188 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var ctors = require( '@stdlib/array-typed-complex-ctors' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'complex64' ]; -var order = 'row-major'; -var abtype = { - 'complex64': 'float32', - 'complex128': 'float64' -}; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf.get( idx ); -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf.set( value, idx ); -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var xbuf; - var ybuf; - var x; - var y; - var i; - - xbuf = filledarray( 0.0, len*2, abtype[ xtype ] ); - ybuf = filledarray( 0.0, len*2, abtype[ ytype ] ); - for ( i = 0; i < len*2; i++ ) { - xbuf[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': new ( ctors( xtype ) )( xbuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': new ( ctors( ytype ) )( ybuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 5; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_columnmajor.js b/benchmark/benchmark.3d_blocked_columnmajor.js deleted file mode 100644 index 22d765f..0000000 --- a/benchmark/benchmark.3d_blocked_columnmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_rowmajor.js b/benchmark/benchmark.3d_blocked_rowmajor.js deleted file mode 100644 index c6afae5..0000000 --- a/benchmark/benchmark.3d_blocked_rowmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_columnmajor.js b/benchmark/benchmark.3d_columnmajor.js deleted file mode 100644 index 92c5c4a..0000000 --- a/benchmark/benchmark.3d_columnmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_rowmajor.js b/benchmark/benchmark.3d_rowmajor.js deleted file mode 100644 index b8c7151..0000000 --- a/benchmark/benchmark.3d_rowmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_columnmajor.js b/benchmark/benchmark.4d_blocked_columnmajor.js deleted file mode 100644 index 192c44b..0000000 --- a/benchmark/benchmark.4d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_rowmajor.js b/benchmark/benchmark.4d_blocked_rowmajor.js deleted file mode 100644 index a6011ee..0000000 --- a/benchmark/benchmark.4d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_columnmajor.js b/benchmark/benchmark.4d_columnmajor.js deleted file mode 100644 index 91a7941..0000000 --- a/benchmark/benchmark.4d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_rowmajor.js b/benchmark/benchmark.4d_rowmajor.js deleted file mode 100644 index 3e47264..0000000 --- a/benchmark/benchmark.4d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_columnmajor.js b/benchmark/benchmark.5d_blocked_columnmajor.js deleted file mode 100644 index 2aa9a34..0000000 --- a/benchmark/benchmark.5d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_rowmajor.js b/benchmark/benchmark.5d_blocked_rowmajor.js deleted file mode 100644 index 198f520..0000000 --- a/benchmark/benchmark.5d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_columnmajor.js b/benchmark/benchmark.5d_columnmajor.js deleted file mode 100644 index 81a2ce7..0000000 --- a/benchmark/benchmark.5d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_rowmajor.js b/benchmark/benchmark.5d_rowmajor.js deleted file mode 100644 index edafb5b..0000000 --- a/benchmark/benchmark.5d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_columnmajor.js b/benchmark/benchmark.6d_blocked_columnmajor.js deleted file mode 100644 index b2ca2ed..0000000 --- a/benchmark/benchmark.6d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_rowmajor.js b/benchmark/benchmark.6d_blocked_rowmajor.js deleted file mode 100644 index 367aecf..0000000 --- a/benchmark/benchmark.6d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_columnmajor.js b/benchmark/benchmark.6d_columnmajor.js deleted file mode 100644 index ccac30f..0000000 --- a/benchmark/benchmark.6d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_rowmajor.js b/benchmark/benchmark.6d_rowmajor.js deleted file mode 100644 index 2b6e55e..0000000 --- a/benchmark/benchmark.6d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_columnmajor.js b/benchmark/benchmark.7d_blocked_columnmajor.js deleted file mode 100644 index 5ca83ee..0000000 --- a/benchmark/benchmark.7d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_rowmajor.js b/benchmark/benchmark.7d_blocked_rowmajor.js deleted file mode 100644 index 4bb45b4..0000000 --- a/benchmark/benchmark.7d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_columnmajor.js b/benchmark/benchmark.7d_columnmajor.js deleted file mode 100644 index d80927c..0000000 --- a/benchmark/benchmark.7d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_rowmajor.js b/benchmark/benchmark.7d_rowmajor.js deleted file mode 100644 index 24571f8..0000000 --- a/benchmark/benchmark.7d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_columnmajor.js b/benchmark/benchmark.8d_blocked_columnmajor.js deleted file mode 100644 index 92b9f0b..0000000 --- a/benchmark/benchmark.8d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_rowmajor.js b/benchmark/benchmark.8d_blocked_rowmajor.js deleted file mode 100644 index 63a0c16..0000000 --- a/benchmark/benchmark.8d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_columnmajor.js b/benchmark/benchmark.8d_columnmajor.js deleted file mode 100644 index fd03c6a..0000000 --- a/benchmark/benchmark.8d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_rowmajor.js b/benchmark/benchmark.8d_rowmajor.js deleted file mode 100644 index 8d287ba..0000000 --- a/benchmark/benchmark.8d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_columnmajor.js b/benchmark/benchmark.9d_blocked_columnmajor.js deleted file mode 100644 index e722e1b..0000000 --- a/benchmark/benchmark.9d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_rowmajor.js b/benchmark/benchmark.9d_blocked_rowmajor.js deleted file mode 100644 index c2591f7..0000000 --- a/benchmark/benchmark.9d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_columnmajor.js b/benchmark/benchmark.9d_columnmajor.js deleted file mode 100644 index babd166..0000000 --- a/benchmark/benchmark.9d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_rowmajor.js b/benchmark/benchmark.9d_rowmajor.js deleted file mode 100644 index 11e35e2..0000000 --- a/benchmark/benchmark.9d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/branches.md b/branches.md deleted file mode 100644 index 458a893..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/ndarray/base/map" -%% click B href "https://github.com/stdlib-js/ndarray-base-map/tree/main" -%% click C href "https://github.com/stdlib-js/ndarray-base-map/tree/production" -%% click D href "https://github.com/stdlib-js/ndarray-base-map/tree/esm" -%% click E href "https://github.com/stdlib-js/ndarray-base-map/tree/deno" -%% click F href "https://github.com/stdlib-js/ndarray-base-map/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/map -[production-url]: https://github.com/stdlib-js/ndarray-base-map/tree/production -[deno-url]: https://github.com/stdlib-js/ndarray-base-map/tree/deno -[deno-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/ndarray-base-map/tree/umd -[umd-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/ndarray-base-map/tree/esm -[esm-readme]: https://github.com/stdlib-js/ndarray-base-map/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 4504e2e..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import map from '../docs/types/index'; -export = map; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index fd1d096..0000000 --- a/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict";var ur=function(a,v){return function(){return v||a((v={exports:{}}).exports,v),v.exports}};var Lr=ur(function(g0,Kr){"use strict";var hv=require("@stdlib/ndarray-base-unary-loop-interchange-order"),mv=require("@stdlib/ndarray-base-unary-tiling-block-size"),kv=require("@stdlib/array-base-take-indexed"),zv=require("@stdlib/array-base-reverse");function gv(a,v,U,Q){var r,V,K,L,I,B,E,M,T,D,C,O,S,s,h,c,k,q,g,i,j,f,u,o,x,e;for(e=hv(a.shape,a.strides,v.strides),S=e.sh,c=e.sx,k=e.sy,D=zv(e.idx),r=mv(a.dtype,v.dtype),q=a.offset,g=v.offset,V=a.data,K=v.data,L=c[0],B=k[0],x=S[1];x>0;)for(x0;)for(o0;)for(y0;)for(p0;)for(l0;)for(R0;)for(_0;)for(n0;)for(w0;)for(N0;)for(F0;)for(H0;)for(W0;)for(J0;)for(ir0;)for(ar0;)for(A0;)for(Z0;)for(Y0;)for(or0;)for(tr0;)for(fr0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(Sr0;)for(pr0;)for(yr0;)for(tr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(Mr0;)for(Er0;)for(Tr0;)for(Pr0;)for(Or0;)for(wr0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(u0;)for(f0;)for(l0;)for(d0;)for(m0;)for(n0;)for(w0;)for(t0;)for(z0;)for(H0;)for(W0;)for(J0;)for(G0;)for(X0;)for(A0;)for(Z0;)for(Y0;)for(or0;)for($0;)for(N0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(ir0;)for(ar0;)for(lr0;)for(cr0;)for(Sr0;)for(pr0;)for(yr0;)for(tr0;)for(fr0;)for(dr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(Tr0;)for(Pr0;)for(Or0;)for(wr0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder = require( '@stdlib/ndarray-base-iteration-order' );\nvar minmaxViewBufferIndex = require( '@stdlib/ndarray-base-minmax-view-buffer-index' );\nvar ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' );\nvar blockedaccessormap2d = require( './2d_blocked_accessors.js' );\nvar blockedaccessormap3d = require( './3d_blocked_accessors.js' );\nvar blockedaccessormap4d = require( './4d_blocked_accessors.js' );\nvar blockedaccessormap5d = require( './5d_blocked_accessors.js' );\nvar blockedaccessormap6d = require( './6d_blocked_accessors.js' );\nvar blockedaccessormap7d = require( './7d_blocked_accessors.js' );\nvar blockedaccessormap8d = require( './8d_blocked_accessors.js' );\nvar blockedaccessormap9d = require( './9d_blocked_accessors.js' );\nvar blockedaccessormap10d = require( './10d_blocked_accessors.js' );\nvar blockedmap2d = require( './2d_blocked.js' );\nvar blockedmap3d = require( './3d_blocked.js' );\nvar blockedmap4d = require( './4d_blocked.js' );\nvar blockedmap5d = require( './5d_blocked.js' );\nvar blockedmap6d = require( './6d_blocked.js' );\nvar blockedmap7d = require( './7d_blocked.js' );\nvar blockedmap8d = require( './8d_blocked.js' );\nvar blockedmap9d = require( './9d_blocked.js' );\nvar blockedmap10d = require( './10d_blocked.js' );\nvar accessormap0d = require( './0d_accessors.js' );\nvar accessormap1d = require( './1d_accessors.js' );\nvar accessormap2d = require( './2d_accessors.js' );\nvar accessormap3d = require( './3d_accessors.js' );\nvar accessormap4d = require( './4d_accessors.js' );\nvar accessormap5d = require( './5d_accessors.js' );\nvar accessormap6d = require( './6d_accessors.js' );\nvar accessormap7d = require( './7d_accessors.js' );\nvar accessormap8d = require( './8d_accessors.js' );\nvar accessormap9d = require( './9d_accessors.js' );\nvar accessormap10d = require( './10d_accessors.js' );\nvar accessormapnd = require( './nd_accessors.js' );\nvar map0d = require( './0d.js' );\nvar map1d = require( './1d.js' );\nvar map2d = require( './2d.js' );\nvar map3d = require( './3d.js' );\nvar map4d = require( './4d.js' );\nvar map5d = require( './5d.js' );\nvar map6d = require( './6d.js' );\nvar map7d = require( './7d.js' );\nvar map8d = require( './8d.js' );\nvar map9d = require( './9d.js' );\nvar map10d = require( './10d.js' );\nvar mapnd = require( './nd.js' );\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar xmmv;\n\tvar ymmv;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ns;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tns = 0; // number of singleton dimensions\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\n\t\t// Check whether the current dimension is a singleton dimension...\n\t\tif ( d === 1 ) {\n\t\t\tns += 1;\n\t\t}\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays...\n\tif ( ns === ndims-1 ) {\n\t\t// Get the index of the non-singleton dimension...\n\t\tfor ( i = 0; i < ndims; i++ ) {\n\t\t\tif ( shx[ i ] !== 1 ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tx.shape = [ shx[i] ];\n\t\ty.shape = x.shape;\n\t\tx.strides = [ sx[i] ];\n\t\ty.strides = [ sy[i] ];\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t}\n\n\tiox = iterationOrder( sx ); // +/-1\n\tioy = iterationOrder( sy ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine the minimum and maximum linear indices which are accessible by the array views:\n\t\txmmv = minmaxViewBufferIndex( shx, sx, x.offset );\n\t\tymmv = minmaxViewBufferIndex( shy, sy, y.offset );\n\n\t\t// Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays...\n\t\tif ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) {\n\t\t\t// Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values...\n\t\t\tif ( iox === 1 ) {\n\t\t\t\tox = xmmv[ 0 ];\n\t\t\t} else {\n\t\t\t\tox = xmmv[ 1 ];\n\t\t\t}\n\t\t\tif ( ioy === 1 ) {\n\t\t\t\toy = ymmv[ 0 ];\n\t\t\t} else {\n\t\t\t\toy = ymmv[ 1 ];\n\t\t\t}\n\t\t\tx.shape = [ len ];\n\t\t\ty.shape = x.shape;\n\t\t\tx.strides = [ iox ];\n\t\t\ty.strides = [ ioy ];\n\t\t\tx.offset = ox;\n\t\t\ty.offset = oy;\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality...\n\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration...\n\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray.\n*\n* @module @stdlib/ndarray-base-map\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var map = require( '@stdlib/ndarray-base-map' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\n\n// MODULES //\n\nvar main = require( './main.js' );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "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", - "names": ["require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "get", "set", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "get", "set", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "set", "get", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_accessors", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d_accessors", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "get", "set", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd_accessors", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "get", "set", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_d", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_main", "__commonJSMin", "exports", "module", "iterationOrder", "minmaxViewBufferIndex", "ndarray2object", "blockedaccessormap2d", "blockedaccessormap3d", "blockedaccessormap4d", "blockedaccessormap5d", "blockedaccessormap6d", "blockedaccessormap7d", "blockedaccessormap8d", "blockedaccessormap9d", "blockedaccessormap10d", "blockedmap2d", "blockedmap3d", "blockedmap4d", "blockedmap5d", "blockedmap6d", "blockedmap7d", "blockedmap8d", "blockedmap9d", "blockedmap10d", "accessormap0d", "accessormap1d", "accessormap2d", "accessormap3d", "accessormap4d", "accessormap5d", "accessormap6d", "accessormap7d", "accessormap8d", "accessormap9d", "accessormap10d", "accessormapnd", "map0d", "map1d", "map2d", "map3d", "map4d", "map5d", "map6d", "map7d", "map8d", "map9d", "map10d", "mapnd", "MAP", "ACCESSOR_MAP", "BLOCKED_MAP", "BLOCKED_ACCESSOR_MAP", "MAX_DIMS", "map", "arrays", "fcn", "thisArg", "ndims", "xmmv", "ymmv", "shx", "shy", "iox", "ioy", "len", "sx", "sy", "ox", "oy", "ns", "x", "y", "i", "d", "main"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index be30da1..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,78 +0,0 @@ - -{{alias}}( arrays, fcn[, thisArg] ) - Applies a callback function to elements in an input ndarray and assigns - results to elements in an output ndarray. - - Each provided "ndarray" should be an object with following properties: - - - dtype: data type. - - data: data buffer. - - shape: dimensions. - - strides: stride lengths. - - offset: index offset. - - order: specifies whether an ndarray is row-major (C-style) or column-major - (Fortran-style). - - The callback function is provided the following arguments: - - - value: current array element. - - indices: current array element indices. - - arr: the input ndarray. - - Parameters - ---------- - arrays: ArrayLikeObject - Array-like object containing one input ndarray and one output ndarray. - - fcn: Function - Callback function. - - thisArg: any (optional) - Callback function execution context. - - Examples - -------- - // Define ndarray data and meta data... - > var xbuf = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ybuf = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] ); - > var dtype = 'float64'; - > var shape = [ 2, 2 ]; - > var sx = [ 2, 1 ]; - > var sy = [ 2, 1 ]; - > var ox = 0; - > var oy = 0; - > var order = 'row-major'; - - // Define a callback function: - > function f( v ) { return v*10.0; }; - - // Using ndarrays... - > var x = {{alias:@stdlib/ndarray/ctor}}( dtype, xbuf, shape, sx, ox, order ); - > var y = {{alias:@stdlib/ndarray/ctor}}( dtype, ybuf, shape, sy, oy, order ); - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - // Using minimal ndarray-like objects... - > x = { - ... 'dtype': dtype, - ... 'data': xbuf, - ... 'shape': shape, - ... 'strides': sx, - ... 'offset': ox, - ... 'order': order - ... }; - > y = { - ... 'dtype': dtype, - ... 'data': ybuf, - ... 'shape': shape, - ... 'strides': sy, - ... 'offset': oy, - ... 'order': order - ... }; - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - See Also - -------- diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 7bc28dd..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/// - -import { ndarray } from '@stdlib/types/ndarray'; -import map = require( './index' ); - -/** -* Mock function to create an ndarray-like object. -* -* @return ndarray-like object -*/ -function array(): ndarray { - const obj: ndarray = { - 'byteLength': 80, - 'BYTES_PER_ELEMENT': 8, - 'data': new Float64Array( 10 ), - 'dtype': 'float64', - 'flags': { - 'ROW_MAJOR_CONTIGUOUS': true, - 'COLUMN_MAJOR_CONTIGUOUS': false - }, - 'length': 10, - 'ndims': 1, - 'offset': 0, - 'order': 'row-major', - 'shape': [ 10 ], - 'strides': [ 1 ], - 'get': (): number => 0, - 'set': (): ndarray => obj - }; - return obj; -} - -/** -* Evaluates the identity function. -* -* @param x - input value -* @returns input value -*/ -function identity( x: number ): number { - return x; -} - -// TESTS // - -// The function returns `undefined`... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, identity ); // $ExpectType void - map( arrays, identity, {} ); // $ExpectType void -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object containing ndarray-like objects... -{ - map( 5, identity ); // $ExpectError - map( true, identity ); // $ExpectError - map( false, identity ); // $ExpectError - map( null, identity ); // $ExpectError - map( undefined, identity ); // $ExpectError - map( {}, identity ); // $ExpectError - map( [ 1 ], identity ); // $ExpectError - map( ( x: number ): number => x, identity ); // $ExpectError - - map( 5, identity, {} ); // $ExpectError - map( true, identity, {} ); // $ExpectError - map( false, identity, {} ); // $ExpectError - map( null, identity, {} ); // $ExpectError - map( undefined, identity, {} ); // $ExpectError - map( {}, identity, {} ); // $ExpectError - map( [ 1 ], identity, {} ); // $ExpectError - map( ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a callback function... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, '10' ); // $ExpectError - map( arrays, 5 ); // $ExpectError - map( arrays, true ); // $ExpectError - map( arrays, false ); // $ExpectError - map( arrays, null ); // $ExpectError - map( arrays, undefined ); // $ExpectError - map( arrays, [] ); // $ExpectError - map( arrays, {} ); // $ExpectError - - map( arrays, '10', {} ); // $ExpectError - map( arrays, 5, {} ); // $ExpectError - map( arrays, true, {} ); // $ExpectError - map( arrays, false, {} ); // $ExpectError - map( arrays, null, {} ); // $ExpectError - map( arrays, undefined, {} ); // $ExpectError - map( arrays, [], {} ); // $ExpectError - map( arrays, {}, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map(); // $ExpectError - map( arrays ); // $ExpectError{ - map( arrays, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index d89ee00..0000000 --- a/examples/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var ndarray2array = require( '@stdlib/ndarray-base-to-array' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var map = require( './../lib' ); - -var N = 10; -var x = { - 'dtype': 'generic', - 'data': filledarrayBy( N, 'generic', discreteUniform( -100, 100 ) ), - 'shape': [ 5, 2 ], - 'strides': [ 2, 1 ], - 'offset': 0, - 'order': 'row-major' -}; -var y = { - 'dtype': 'generic', - 'data': filledarray( 0, N, 'generic' ), - 'shape': x.shape.slice(), - 'strides': shape2strides( x.shape, 'column-major' ), - 'offset': 0, - 'order': 'column-major' -}; - -map( [ x, y ], naryFunction( abs, 1 ) ); -console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); -console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 97% rename from docs/types/index.d.ts rename to index.d.ts index 78ac9b8..9dd6ef1 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -18,7 +18,7 @@ // TypeScript Version: 4.1 -/// +/// import { ArrayLike } from '@stdlib/types/array'; import { typedndarray } from '@stdlib/types/ndarray'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..33264b4 --- /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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-minmax-view-buffer-index@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import m from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var y="throw";var v="throw";var j=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport minmaxViewBufferIndex from '@stdlib/ndarray-base-minmax-view-buffer-index';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar xmmv;\n\tvar ymmv;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ns;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tns = 0; // number of singleton dimensions\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\n\t\t// Check whether the current dimension is a singleton dimension...\n\t\tif ( d === 1 ) {\n\t\t\tns += 1;\n\t\t}\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays...\n\tif ( ns === ndims-1 ) {\n\t\t// Get the index of the non-singleton dimension...\n\t\tfor ( i = 0; i < ndims; i++ ) {\n\t\t\tif ( shx[ i ] !== 1 ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tx.shape = [ shx[i] ];\n\t\ty.shape = x.shape;\n\t\tx.strides = [ sx[i] ];\n\t\ty.strides = [ sy[i] ];\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t}\n\n\tiox = iterationOrder( sx ); // +/-1\n\tioy = iterationOrder( sy ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine the minimum and maximum linear indices which are accessible by the array views:\n\t\txmmv = minmaxViewBufferIndex( shx, sx, x.offset );\n\t\tymmv = minmaxViewBufferIndex( shy, sy, y.offset );\n\n\t\t// Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays...\n\t\tif ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) {\n\t\t\t// Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values...\n\t\t\tif ( iox === 1 ) {\n\t\t\t\tox = xmmv[ 0 ];\n\t\t\t} else {\n\t\t\t\tox = xmmv[ 1 ];\n\t\t\t}\n\t\t\tif ( ioy === 1 ) {\n\t\t\t\toy = ymmv[ 0 ];\n\t\t\t} else {\n\t\t\t\toy = ymmv[ 1 ];\n\t\t\t}\n\t\t\tx.shape = [ len ];\n\t\t\ty.shape = x.shape;\n\t\t\tx.strides = [ iox ];\n\t\t\ty.strides = [ ioy ];\n\t\t\tx.offset = ox;\n\t\t\ty.offset = oy;\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality...\n\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration...\n\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","xmmv","ymmv","shx","shy","iox","ioy","len","ns","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","minmaxViewBufferIndex","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/lib/0d.js b/lib/0d.js deleted file mode 100644 index f19e08f..0000000 --- a/lib/0d.js +++ /dev/null @@ -1,100 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ){ -* return z * 10.0; -* } -* -* // Create a data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0 ] ); -* var ybuf = new Float64Array( 1 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offset: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like object: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* } -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0 ] -*/ -function map0d( x, y, fcn, thisArg ) { - y.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref ); -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/0d_accessors.js b/lib/0d_accessors.js deleted file mode 100644 index 0ce37b7..0000000 --- a/lib/0d_accessors.js +++ /dev/null @@ -1,121 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var ybuf = new Complex64Array( 2 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 30.0 -* -* var im = imagf( v ); -* // returns 40.0 -*/ -function map0d( x, y, fcn, thisArg ) { - y.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/10d.js b/lib/10d.js deleted file mode 100644 index f81fea5..0000000 --- a/lib/10d.js +++ /dev/null @@ -1,280 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_accessors.js b/lib/10d_accessors.js deleted file mode 100644 index b80eca7..0000000 --- a/lib/10d_accessors.js +++ /dev/null @@ -1,305 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_blocked.js b/lib/10d_blocked.js deleted file mode 100644 index 05863d6..0000000 --- a/lib/10d_blocked.js +++ /dev/null @@ -1,389 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/10d_blocked_accessors.js b/lib/10d_blocked_accessors.js deleted file mode 100644 index af78894..0000000 --- a/lib/10d_blocked_accessors.js +++ /dev/null @@ -1,414 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/1d.js b/lib/1d.js deleted file mode 100644 index b5f0220..0000000 --- a/lib/1d.js +++ /dev/null @@ -1,129 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 2 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 40.0, 60.0, 80.0 ] -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/1d_accessors.js b/lib/1d_accessors.js deleted file mode 100644 index b98015f..0000000 --- a/lib/1d_accessors.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 1 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/2d.js b/lib/2d.js deleted file mode 100644 index ac7b2fe..0000000 --- a/lib/2d.js +++ /dev/null @@ -1,166 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_accessors.js b/lib/2d_accessors.js deleted file mode 100644 index 07fb9c6..0000000 --- a/lib/2d_accessors.js +++ /dev/null @@ -1,191 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_blocked.js b/lib/2d_blocked.js deleted file mode 100644 index 9803bb4..0000000 --- a/lib/2d_blocked.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/2d_blocked_accessors.js b/lib/2d_blocked_accessors.js deleted file mode 100644 index 08e5eb7..0000000 --- a/lib/2d_blocked_accessors.js +++ /dev/null @@ -1,220 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/3d.js b/lib/3d.js deleted file mode 100644 index dd42769..0000000 --- a/lib/3d.js +++ /dev/null @@ -1,180 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_accessors.js b/lib/3d_accessors.js deleted file mode 100644 index 0a2042c..0000000 --- a/lib/3d_accessors.js +++ /dev/null @@ -1,205 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 2, 1 ]; -* var sy = [ 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var get; - var set; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_blocked.js b/lib/3d_blocked.js deleted file mode 100644 index d15d04c..0000000 --- a/lib/3d_blocked.js +++ /dev/null @@ -1,221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/3d_blocked_accessors.js b/lib/3d_blocked_accessors.js deleted file mode 100644 index 551417b..0000000 --- a/lib/3d_blocked_accessors.js +++ /dev/null @@ -1,246 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 2, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/4d.js b/lib/4d.js deleted file mode 100644 index 0556d8e..0000000 --- a/lib/4d.js +++ /dev/null @@ -1,194 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_accessors.js b/lib/4d_accessors.js deleted file mode 100644 index 1067a7e..0000000 --- a/lib/4d_accessors.js +++ /dev/null @@ -1,219 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_blocked.js b/lib/4d_blocked.js deleted file mode 100644 index 2b62030..0000000 --- a/lib/4d_blocked.js +++ /dev/null @@ -1,245 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/4d_blocked_accessors.js b/lib/4d_blocked_accessors.js deleted file mode 100644 index fe56f55..0000000 --- a/lib/4d_blocked_accessors.js +++ /dev/null @@ -1,270 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/5d.js b/lib/5d.js deleted file mode 100644 index fb138a5..0000000 --- a/lib/5d.js +++ /dev/null @@ -1,208 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_accessors.js b/lib/5d_accessors.js deleted file mode 100644 index 495e033..0000000 --- a/lib/5d_accessors.js +++ /dev/null @@ -1,233 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_blocked.js b/lib/5d_blocked.js deleted file mode 100644 index 7162107..0000000 --- a/lib/5d_blocked.js +++ /dev/null @@ -1,269 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/5d_blocked_accessors.js b/lib/5d_blocked_accessors.js deleted file mode 100644 index 4a0a880..0000000 --- a/lib/5d_blocked_accessors.js +++ /dev/null @@ -1,294 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/6d.js b/lib/6d.js deleted file mode 100644 index 0389a6e..0000000 --- a/lib/6d.js +++ /dev/null @@ -1,224 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map6d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_accessors.js b/lib/6d_accessors.js deleted file mode 100644 index 0287a54..0000000 --- a/lib/6d_accessors.js +++ /dev/null @@ -1,249 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_blocked.js b/lib/6d_blocked.js deleted file mode 100644 index e850edb..0000000 --- a/lib/6d_blocked.js +++ /dev/null @@ -1,293 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/6d_blocked_accessors.js b/lib/6d_blocked_accessors.js deleted file mode 100644 index 1acf143..0000000 --- a/lib/6d_blocked_accessors.js +++ /dev/null @@ -1,318 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var set; - var get; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/7d.js b/lib/7d.js deleted file mode 100644 index f2c6603..0000000 --- a/lib/7d.js +++ /dev/null @@ -1,238 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_accessors.js b/lib/7d_accessors.js deleted file mode 100644 index e50b3bf..0000000 --- a/lib/7d_accessors.js +++ /dev/null @@ -1,263 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_blocked.js b/lib/7d_blocked.js deleted file mode 100644 index 1b6ce95..0000000 --- a/lib/7d_blocked.js +++ /dev/null @@ -1,317 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/7d_blocked_accessors.js b/lib/7d_blocked_accessors.js deleted file mode 100644 index 52537bc..0000000 --- a/lib/7d_blocked_accessors.js +++ /dev/null @@ -1,342 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/8d.js b/lib/8d.js deleted file mode 100644 index 641c2f9..0000000 --- a/lib/8d.js +++ /dev/null @@ -1,252 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_accessors.js b/lib/8d_accessors.js deleted file mode 100644 index 08c4970..0000000 --- a/lib/8d_accessors.js +++ /dev/null @@ -1,277 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_blocked.js b/lib/8d_blocked.js deleted file mode 100644 index a52ab49..0000000 --- a/lib/8d_blocked.js +++ /dev/null @@ -1,341 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/8d_blocked_accessors.js b/lib/8d_blocked_accessors.js deleted file mode 100644 index e40b718..0000000 --- a/lib/8d_blocked_accessors.js +++ /dev/null @@ -1,366 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/9d.js b/lib/9d.js deleted file mode 100644 index ff40cad..0000000 --- a/lib/9d.js +++ /dev/null @@ -1,266 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_accessors.js b/lib/9d_accessors.js deleted file mode 100644 index ce30b37..0000000 --- a/lib/9d_accessors.js +++ /dev/null @@ -1,291 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_blocked.js b/lib/9d_blocked.js deleted file mode 100644 index 4440ee8..0000000 --- a/lib/9d_blocked.js +++ /dev/null @@ -1,365 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/9d_blocked_accessors.js b/lib/9d_blocked_accessors.js deleted file mode 100644 index 5998505..0000000 --- a/lib/9d_blocked_accessors.js +++ /dev/null @@ -1,390 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 80cf80e..0000000 --- a/lib/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray. -* -* @module @stdlib/ndarray-base-map -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var map = require( '@stdlib/ndarray-base-map' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 551b589..0000000 --- a/lib/main.js +++ /dev/null @@ -1,342 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var iterationOrder = require( '@stdlib/ndarray-base-iteration-order' ); -var minmaxViewBufferIndex = require( '@stdlib/ndarray-base-minmax-view-buffer-index' ); -var ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' ); -var blockedaccessormap2d = require( './2d_blocked_accessors.js' ); -var blockedaccessormap3d = require( './3d_blocked_accessors.js' ); -var blockedaccessormap4d = require( './4d_blocked_accessors.js' ); -var blockedaccessormap5d = require( './5d_blocked_accessors.js' ); -var blockedaccessormap6d = require( './6d_blocked_accessors.js' ); -var blockedaccessormap7d = require( './7d_blocked_accessors.js' ); -var blockedaccessormap8d = require( './8d_blocked_accessors.js' ); -var blockedaccessormap9d = require( './9d_blocked_accessors.js' ); -var blockedaccessormap10d = require( './10d_blocked_accessors.js' ); -var blockedmap2d = require( './2d_blocked.js' ); -var blockedmap3d = require( './3d_blocked.js' ); -var blockedmap4d = require( './4d_blocked.js' ); -var blockedmap5d = require( './5d_blocked.js' ); -var blockedmap6d = require( './6d_blocked.js' ); -var blockedmap7d = require( './7d_blocked.js' ); -var blockedmap8d = require( './8d_blocked.js' ); -var blockedmap9d = require( './9d_blocked.js' ); -var blockedmap10d = require( './10d_blocked.js' ); -var accessormap0d = require( './0d_accessors.js' ); -var accessormap1d = require( './1d_accessors.js' ); -var accessormap2d = require( './2d_accessors.js' ); -var accessormap3d = require( './3d_accessors.js' ); -var accessormap4d = require( './4d_accessors.js' ); -var accessormap5d = require( './5d_accessors.js' ); -var accessormap6d = require( './6d_accessors.js' ); -var accessormap7d = require( './7d_accessors.js' ); -var accessormap8d = require( './8d_accessors.js' ); -var accessormap9d = require( './9d_accessors.js' ); -var accessormap10d = require( './10d_accessors.js' ); -var accessormapnd = require( './nd_accessors.js' ); -var map0d = require( './0d.js' ); -var map1d = require( './1d.js' ); -var map2d = require( './2d.js' ); -var map3d = require( './3d.js' ); -var map4d = require( './4d.js' ); -var map5d = require( './5d.js' ); -var map6d = require( './6d.js' ); -var map7d = require( './7d.js' ); -var map8d = require( './8d.js' ); -var map9d = require( './9d.js' ); -var map10d = require( './10d.js' ); -var mapnd = require( './nd.js' ); - - -// VARIABLES // - -var MAP = [ - map0d, - map1d, - map2d, - map3d, - map4d, - map5d, - map6d, - map7d, - map8d, - map9d, - map10d -]; -var ACCESSOR_MAP = [ - accessormap0d, - accessormap1d, - accessormap2d, - accessormap3d, - accessormap4d, - accessormap5d, - accessormap6d, - accessormap7d, - accessormap8d, - accessormap9d, - accessormap10d -]; -var BLOCKED_MAP = [ - blockedmap2d, // 0 - blockedmap3d, - blockedmap4d, - blockedmap5d, - blockedmap6d, - blockedmap7d, - blockedmap8d, - blockedmap9d, - blockedmap10d // 8 -]; -var BLOCKED_ACCESSOR_MAP = [ - blockedaccessormap2d, // 0 - blockedaccessormap3d, - blockedaccessormap4d, - blockedaccessormap5d, - blockedaccessormap6d, - blockedaccessormap7d, - blockedaccessormap8d, - blockedaccessormap9d, - blockedaccessormap10d // 8 -]; -var MAX_DIMS = MAP.length -1; - - -// MAIN // - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* ## Notes -* -* - Each provided ndarray should be an `object` with the following properties: -* -* - **dtype**: data type. -* - **data**: data buffer. -* - **shape**: dimensions. -* - **strides**: stride lengths. -* - **offset**: index offset. -* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style). -* -* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array -* @param {Callback} fcn - callback function -* @param {*} [thisArg] - callback execution context -* @throws {Error} arrays must have the same number of dimensions -* @throws {Error} arrays must have the same shape -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map( arrays, fcn, thisArg ) { - var ndims; - var xmmv; - var ymmv; - var shx; - var shy; - var iox; - var ioy; - var len; - var sx; - var sy; - var ox; - var oy; - var ns; - var x; - var y; - var i; - var d; - - // Unpack the ndarrays and standardize ndarray meta data: - x = ndarray2object( arrays[ 0 ] ); - y = ndarray2object( arrays[ 1 ] ); - - // Verify that the input and output arrays have the same number of dimensions... - shx = x.shape; - shy = y.shape; - ndims = shx.length; - if ( ndims !== shy.length ) { - throw new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' ); - } - // Determine whether we can avoid iteration altogether... - if ( ndims === 0 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Verify that the input and output arrays have the same dimensions... - len = 1; // number of elements - ns = 0; // number of singleton dimensions - for ( i = 0; i < ndims; i++ ) { - d = shx[ i ]; - if ( d !== shy[ i ] ) { - throw new Error( 'invalid arguments. Array must have the same shape.' ); - } - // Note that, if one of the dimensions is `0`, the length will be `0`... - len *= d; - - // Check whether the current dimension is a singleton dimension... - if ( d === 1 ) { - ns += 1; - } - } - // Check whether we were provided empty ndarrays... - if ( len === 0 ) { - return; - } - // Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays... - if ( ndims === 1 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - - sx = x.strides; - sy = y.strides; - - // Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays... - if ( ns === ndims-1 ) { - // Get the index of the non-singleton dimension... - for ( i = 0; i < ndims; i++ ) { - if ( shx[ i ] !== 1 ) { - break; - } - } - x.shape = [ shx[i] ]; - y.shape = x.shape; - x.strides = [ sx[i] ]; - y.strides = [ sy[i] ]; - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg ); - } - return MAP[ 1 ]( x, y, fcn, thisArg ); - } - - iox = iterationOrder( sx ); // +/-1 - ioy = iterationOrder( sy ); // +/-1 - - // Determine whether we can avoid blocked iteration... - if ( iox !== 0 && ioy !== 0 && iox === ioy ) { - // Determine the minimum and maximum linear indices which are accessible by the array views: - xmmv = minmaxViewBufferIndex( shx, sx, x.offset ); - ymmv = minmaxViewBufferIndex( shy, sy, y.offset ); - - // Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays... - if ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) { - // Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values... - if ( iox === 1 ) { - ox = xmmv[ 0 ]; - } else { - ox = xmmv[ 1 ]; - } - if ( ioy === 1 ) { - oy = ymmv[ 0 ]; - } else { - oy = ymmv[ 1 ]; - } - x.shape = [ len ]; - y.shape = x.shape; - x.strides = [ iox ]; - y.strides = [ ioy ]; - x.offset = ox; - y.offset = oy; - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg ); - } - return MAP[ 1 ]( x, y, fcn, thisArg ); - } - // At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality... - - // Determine whether we can use simple nested loops... - if ( ndims <= MAX_DIMS ) { - // So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration... - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Fall-through to blocked iteration... - } - // At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration... - - // Determine whether we can perform blocked iteration... - if ( ndims <= MAX_DIMS ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - return BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - // Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)... - if ( x.accessorProtocol || y.accessorProtocol ) { - return accessormapnd( x, y, fcn, thisArg ); - } - mapnd( x, y, fcn, thisArg ); -} - - -// EXPORTS // - -module.exports = map; diff --git a/lib/nd.js b/lib/nd.js deleted file mode 100644 index 379d56e..0000000 --- a/lib/nd.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/lib/nd_accessors.js b/lib/nd_accessors.js deleted file mode 100644 index a28998b..0000000 --- a/lib/nd_accessors.js +++ /dev/null @@ -1,179 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var get; - var set; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/package.json b/package.json index 9f1d33f..c1b688b 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Apply a callback to elements in an input ndarray and assign results to elements in an output ndarray.", "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,58 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-reverse": "^0.2.2", - "@stdlib/array-base-take-indexed": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/ndarray-base-ind2sub": "^0.2.2", - "@stdlib/ndarray-base-iteration-order": "^0.2.2", - "@stdlib/ndarray-base-minmax-view-buffer-index": "^0.2.2", - "@stdlib/ndarray-base-ndarraylike2object": "^0.2.2", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", - "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.3.2", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-filled": "^0.2.1", - "@stdlib/array-filled-by": "^0.2.1", - "@stdlib/array-typed-complex-ctors": "^0.2.2", - "@stdlib/math-base-assert-is-nan": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/math-base-special-cbrt": "^0.2.2", - "@stdlib/math-base-special-floor": "^0.2.3", - "@stdlib/math-base-special-identity": "^0.2.2", - "@stdlib/math-base-special-pow": "^0.3.0", - "@stdlib/math-base-special-round": "^0.3.0", - "@stdlib/math-base-special-sqrt": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-to-array": "^0.2.1", - "@stdlib/random-base-discrete-uniform": "^0.2.1", - "@stdlib/random-base-randu": "^0.2.1", - "@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", "base", @@ -101,9 +26,8 @@ "transform", "for-each" ], - "__stdlib__": {}, "funding": { "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..376d52d --- /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.js b/test/test.js deleted file mode 100644 index bf08d19..0000000 --- a/test/test.js +++ /dev/null @@ -1,35 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -// FIXME: add tests From 2bd9e2e77562c5d1ff214217ae979492fecce5cf Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 17 Aug 2024 08:30:54 +0000 Subject: [PATCH 03/32] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 09ae79a..9f1d33f 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,8 @@ "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.3.2" + "@stdlib/types": "^0.3.2", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-filled": "^0.2.1", @@ -105,4 +106,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 5d2a3451711897fafabee85eb1cbcec207ab6552 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 17 Aug 2024 08:35:29 +0000 Subject: [PATCH 04/32] Remove files --- index.d.ts | 117 -- index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 4964 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 9dd6ef1..0000000 --- a/index.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { ArrayLike } from '@stdlib/types/array'; -import { typedndarray } from '@stdlib/types/ndarray'; - -/** -* Callback invoked for each ndarray element. -* -* @returns output value -*/ -type Nullary = ( this: V ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @returns output value -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @returns output value -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Ternary = ( this: V, value: T, indices: Array, arr: typedndarray ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Callback = Nullary | Unary | Binary | Ternary; - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* @param arrays - array-like object containing one input ndarray and one output ndarray -* @param fcn - callback function -* @param thisArg - callback function execution context -* @throws arrays must have the same number of dimensions -* @throws arrays must have the same shape -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var ndarray = require( '@stdlib/ndarray-ctor' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarrays: -* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' ); -* var y = ndarray( 'float64', ybuf, shape, sy, oy, 'row-major' ); -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -declare function map( arrays: ArrayLike>, fcn: Callback, thisArg?: ThisParameterType> ): void; - - -// EXPORTS // - -export = map; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 33264b4..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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-minmax-view-buffer-index@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import m from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var y="throw";var v="throw";var j=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport minmaxViewBufferIndex from '@stdlib/ndarray-base-minmax-view-buffer-index';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar xmmv;\n\tvar ymmv;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ns;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tns = 0; // number of singleton dimensions\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\n\t\t// Check whether the current dimension is a singleton dimension...\n\t\tif ( d === 1 ) {\n\t\t\tns += 1;\n\t\t}\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays...\n\tif ( ns === ndims-1 ) {\n\t\t// Get the index of the non-singleton dimension...\n\t\tfor ( i = 0; i < ndims; i++ ) {\n\t\t\tif ( shx[ i ] !== 1 ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tx.shape = [ shx[i] ];\n\t\ty.shape = x.shape;\n\t\tx.strides = [ sx[i] ];\n\t\ty.strides = [ sy[i] ];\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t}\n\n\tiox = iterationOrder( sx ); // +/-1\n\tioy = iterationOrder( sy ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine the minimum and maximum linear indices which are accessible by the array views:\n\t\txmmv = minmaxViewBufferIndex( shx, sx, x.offset );\n\t\tymmv = minmaxViewBufferIndex( shy, sy, y.offset );\n\n\t\t// Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays...\n\t\tif ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) {\n\t\t\t// Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values...\n\t\t\tif ( iox === 1 ) {\n\t\t\t\tox = xmmv[ 0 ];\n\t\t\t} else {\n\t\t\t\tox = xmmv[ 1 ];\n\t\t\t}\n\t\t\tif ( ioy === 1 ) {\n\t\t\t\toy = ymmv[ 0 ];\n\t\t\t} else {\n\t\t\t\toy = ymmv[ 1 ];\n\t\t\t}\n\t\t\tx.shape = [ len ];\n\t\t\ty.shape = x.shape;\n\t\t\tx.strides = [ iox ];\n\t\t\ty.strides = [ ioy ];\n\t\t\tx.offset = ox;\n\t\t\ty.offset = oy;\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality...\n\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration...\n\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","xmmv","ymmv","shx","shy","iox","ioy","len","ns","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","minmaxViewBufferIndex","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 376d52d..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 39ca0d947b2a316959c9ced3e8a2d4c09fa5ce28 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 17 Aug 2024 08:35:49 +0000 Subject: [PATCH 05/32] 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 | 50 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 51 +- SECURITY.md | 5 - .../benchmark.10d_blocked_columnmajor.js | 152 - benchmark/benchmark.10d_blocked_rowmajor.js | 152 - benchmark/benchmark.10d_columnmajor.js | 152 - benchmark/benchmark.10d_rowmajor.js | 152 - benchmark/benchmark.11d_columnmajor.js | 152 - benchmark/benchmark.11d_rowmajor.js | 152 - benchmark/benchmark.1d_columnmajor.js | 141 - benchmark/benchmark.1d_rowmajor.js | 141 - benchmark/benchmark.2d_blocked_columnmajor.js | 153 - benchmark/benchmark.2d_blocked_rowmajor.js | 153 - benchmark/benchmark.2d_columnmajor.js | 153 - benchmark/benchmark.2d_rowmajor.js | 154 - benchmark/benchmark.2d_rowmajor_accessors.js | 181 - ...benchmark.2d_rowmajor_accessors_complex.js | 188 - benchmark/benchmark.3d_blocked_columnmajor.js | 153 - benchmark/benchmark.3d_blocked_rowmajor.js | 153 - benchmark/benchmark.3d_columnmajor.js | 153 - benchmark/benchmark.3d_rowmajor.js | 153 - benchmark/benchmark.4d_blocked_columnmajor.js | 152 - benchmark/benchmark.4d_blocked_rowmajor.js | 152 - benchmark/benchmark.4d_columnmajor.js | 152 - benchmark/benchmark.4d_rowmajor.js | 152 - benchmark/benchmark.5d_blocked_columnmajor.js | 152 - benchmark/benchmark.5d_blocked_rowmajor.js | 152 - benchmark/benchmark.5d_columnmajor.js | 152 - benchmark/benchmark.5d_rowmajor.js | 152 - benchmark/benchmark.6d_blocked_columnmajor.js | 152 - benchmark/benchmark.6d_blocked_rowmajor.js | 152 - benchmark/benchmark.6d_columnmajor.js | 152 - benchmark/benchmark.6d_rowmajor.js | 152 - benchmark/benchmark.7d_blocked_columnmajor.js | 152 - benchmark/benchmark.7d_blocked_rowmajor.js | 152 - benchmark/benchmark.7d_columnmajor.js | 152 - benchmark/benchmark.7d_rowmajor.js | 152 - benchmark/benchmark.8d_blocked_columnmajor.js | 152 - benchmark/benchmark.8d_blocked_rowmajor.js | 152 - benchmark/benchmark.8d_columnmajor.js | 152 - benchmark/benchmark.8d_rowmajor.js | 152 - benchmark/benchmark.9d_blocked_columnmajor.js | 152 - benchmark/benchmark.9d_blocked_rowmajor.js | 152 - benchmark/benchmark.9d_columnmajor.js | 152 - benchmark/benchmark.9d_rowmajor.js | 152 - branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 19 - dist/index.js.map | 7 - docs/repl.txt | 78 - docs/types/test.ts | 128 - examples/index.js | 50 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/0d.js | 100 - lib/0d_accessors.js | 121 - lib/10d.js | 280 - lib/10d_accessors.js | 305 -- lib/10d_blocked.js | 389 -- lib/10d_blocked_accessors.js | 414 -- lib/1d.js | 129 - lib/1d_accessors.js | 154 - lib/2d.js | 166 - lib/2d_accessors.js | 191 - lib/2d_blocked.js | 195 - lib/2d_blocked_accessors.js | 220 - lib/3d.js | 180 - lib/3d_accessors.js | 205 - lib/3d_blocked.js | 221 - lib/3d_blocked_accessors.js | 246 - lib/4d.js | 194 - lib/4d_accessors.js | 219 - lib/4d_blocked.js | 245 - lib/4d_blocked_accessors.js | 270 - lib/5d.js | 208 - lib/5d_accessors.js | 233 - lib/5d_blocked.js | 269 - lib/5d_blocked_accessors.js | 294 - lib/6d.js | 224 - lib/6d_accessors.js | 249 - lib/6d_blocked.js | 293 - lib/6d_blocked_accessors.js | 318 -- lib/7d.js | 238 - lib/7d_accessors.js | 263 - lib/7d_blocked.js | 317 -- lib/7d_blocked_accessors.js | 342 -- lib/8d.js | 252 - lib/8d_accessors.js | 277 - lib/8d_blocked.js | 341 -- lib/8d_blocked_accessors.js | 366 -- lib/9d.js | 266 - lib/9d_accessors.js | 291 - lib/9d_blocked.js | 365 -- lib/9d_blocked_accessors.js | 390 -- lib/index.js | 81 - lib/main.js | 342 -- lib/nd.js | 154 - lib/nd_accessors.js | 179 - package.json | 82 +- stats.html | 4842 +++++++++++++++++ test/dist/test.js | 33 - test/test.js | 35 - 125 files changed, 4872 insertions(+), 21181 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.10d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.10d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.10d_columnmajor.js delete mode 100644 benchmark/benchmark.10d_rowmajor.js delete mode 100644 benchmark/benchmark.11d_columnmajor.js delete mode 100644 benchmark/benchmark.11d_rowmajor.js delete mode 100644 benchmark/benchmark.1d_columnmajor.js delete mode 100644 benchmark/benchmark.1d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.2d_columnmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors_complex.js delete mode 100644 benchmark/benchmark.3d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.3d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.3d_columnmajor.js delete mode 100644 benchmark/benchmark.3d_rowmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.4d_columnmajor.js delete mode 100644 benchmark/benchmark.4d_rowmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.5d_columnmajor.js delete mode 100644 benchmark/benchmark.5d_rowmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.6d_columnmajor.js delete mode 100644 benchmark/benchmark.6d_rowmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.7d_columnmajor.js delete mode 100644 benchmark/benchmark.7d_rowmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.8d_columnmajor.js delete mode 100644 benchmark/benchmark.8d_rowmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.9d_columnmajor.js delete mode 100644 benchmark/benchmark.9d_rowmajor.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 (97%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/0d.js delete mode 100644 lib/0d_accessors.js delete mode 100644 lib/10d.js delete mode 100644 lib/10d_accessors.js delete mode 100644 lib/10d_blocked.js delete mode 100644 lib/10d_blocked_accessors.js delete mode 100644 lib/1d.js delete mode 100644 lib/1d_accessors.js delete mode 100644 lib/2d.js delete mode 100644 lib/2d_accessors.js delete mode 100644 lib/2d_blocked.js delete mode 100644 lib/2d_blocked_accessors.js delete mode 100644 lib/3d.js delete mode 100644 lib/3d_accessors.js delete mode 100644 lib/3d_blocked.js delete mode 100644 lib/3d_blocked_accessors.js delete mode 100644 lib/4d.js delete mode 100644 lib/4d_accessors.js delete mode 100644 lib/4d_blocked.js delete mode 100644 lib/4d_blocked_accessors.js delete mode 100644 lib/5d.js delete mode 100644 lib/5d_accessors.js delete mode 100644 lib/5d_blocked.js delete mode 100644 lib/5d_blocked_accessors.js delete mode 100644 lib/6d.js delete mode 100644 lib/6d_accessors.js delete mode 100644 lib/6d_blocked.js delete mode 100644 lib/6d_blocked_accessors.js delete mode 100644 lib/7d.js delete mode 100644 lib/7d_accessors.js delete mode 100644 lib/7d_blocked.js delete mode 100644 lib/7d_blocked_accessors.js delete mode 100644 lib/8d.js delete mode 100644 lib/8d_accessors.js delete mode 100644 lib/8d_blocked.js delete mode 100644 lib/8d_blocked_accessors.js delete mode 100644 lib/9d.js delete mode 100644 lib/9d_accessors.js delete mode 100644 lib/9d_blocked.js delete mode 100644 lib/9d_blocked_accessors.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js delete mode 100644 lib/nd.js delete mode 100644 lib/nd_accessors.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.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 00c9c4d..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/ndarray/base/map) 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 0696b91..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/ndarray/base/map) 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 1c89592..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: '29 17 * * 1' - - # 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 + + ```
@@ -214,7 +205,7 @@ console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); ## 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.10d_blocked_columnmajor.js b/benchmark/benchmark.10d_blocked_columnmajor.js deleted file mode 100644 index 4a5554b..0000000 --- a/benchmark/benchmark.10d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_blocked_rowmajor.js b/benchmark/benchmark.10d_blocked_rowmajor.js deleted file mode 100644 index 0aa2c3b..0000000 --- a/benchmark/benchmark.10d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_columnmajor.js b/benchmark/benchmark.10d_columnmajor.js deleted file mode 100644 index 618133f..0000000 --- a/benchmark/benchmark.10d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_rowmajor.js b/benchmark/benchmark.10d_rowmajor.js deleted file mode 100644 index 74fe650..0000000 --- a/benchmark/benchmark.10d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_columnmajor.js b/benchmark/benchmark.11d_columnmajor.js deleted file mode 100644 index e02b5a2..0000000 --- a/benchmark/benchmark.11d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_rowmajor.js b/benchmark/benchmark.11d_rowmajor.js deleted file mode 100644 index d6dd1e1..0000000 --- a/benchmark/benchmark.11d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_columnmajor.js b/benchmark/benchmark.1d_columnmajor.js deleted file mode 100644 index 2b598cf..0000000 --- a/benchmark/benchmark.1d_columnmajor.js +++ /dev/null @@ -1,141 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_rowmajor.js b/benchmark/benchmark.1d_rowmajor.js deleted file mode 100644 index 3cd6bfa..0000000 --- a/benchmark/benchmark.1d_rowmajor.js +++ /dev/null @@ -1,141 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_columnmajor.js b/benchmark/benchmark.2d_blocked_columnmajor.js deleted file mode 100644 index 8505a3e..0000000 --- a/benchmark/benchmark.2d_blocked_columnmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_rowmajor.js b/benchmark/benchmark.2d_blocked_rowmajor.js deleted file mode 100644 index c98854c..0000000 --- a/benchmark/benchmark.2d_blocked_rowmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_columnmajor.js b/benchmark/benchmark.2d_columnmajor.js deleted file mode 100644 index c641421..0000000 --- a/benchmark/benchmark.2d_columnmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor.js b/benchmark/benchmark.2d_rowmajor.js deleted file mode 100644 index 3dafe67..0000000 --- a/benchmark/benchmark.2d_rowmajor.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors.js b/benchmark/benchmark.2d_rowmajor_accessors.js deleted file mode 100644 index 0a7dd4c..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors.js +++ /dev/null @@ -1,181 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf[ idx ]; -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf[ idx ] = value; -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors_complex.js b/benchmark/benchmark.2d_rowmajor_accessors_complex.js deleted file mode 100644 index 32b696d..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors_complex.js +++ /dev/null @@ -1,188 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var ctors = require( '@stdlib/array-typed-complex-ctors' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'complex64' ]; -var order = 'row-major'; -var abtype = { - 'complex64': 'float32', - 'complex128': 'float64' -}; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf.get( idx ); -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf.set( value, idx ); -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var xbuf; - var ybuf; - var x; - var y; - var i; - - xbuf = filledarray( 0.0, len*2, abtype[ xtype ] ); - ybuf = filledarray( 0.0, len*2, abtype[ ytype ] ); - for ( i = 0; i < len*2; i++ ) { - xbuf[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': new ( ctors( xtype ) )( xbuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': new ( ctors( ytype ) )( ybuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 5; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_columnmajor.js b/benchmark/benchmark.3d_blocked_columnmajor.js deleted file mode 100644 index 22d765f..0000000 --- a/benchmark/benchmark.3d_blocked_columnmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_rowmajor.js b/benchmark/benchmark.3d_blocked_rowmajor.js deleted file mode 100644 index c6afae5..0000000 --- a/benchmark/benchmark.3d_blocked_rowmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_columnmajor.js b/benchmark/benchmark.3d_columnmajor.js deleted file mode 100644 index 92c5c4a..0000000 --- a/benchmark/benchmark.3d_columnmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_rowmajor.js b/benchmark/benchmark.3d_rowmajor.js deleted file mode 100644 index b8c7151..0000000 --- a/benchmark/benchmark.3d_rowmajor.js +++ /dev/null @@ -1,153 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_columnmajor.js b/benchmark/benchmark.4d_blocked_columnmajor.js deleted file mode 100644 index 192c44b..0000000 --- a/benchmark/benchmark.4d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_rowmajor.js b/benchmark/benchmark.4d_blocked_rowmajor.js deleted file mode 100644 index a6011ee..0000000 --- a/benchmark/benchmark.4d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_columnmajor.js b/benchmark/benchmark.4d_columnmajor.js deleted file mode 100644 index 91a7941..0000000 --- a/benchmark/benchmark.4d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_rowmajor.js b/benchmark/benchmark.4d_rowmajor.js deleted file mode 100644 index 3e47264..0000000 --- a/benchmark/benchmark.4d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_columnmajor.js b/benchmark/benchmark.5d_blocked_columnmajor.js deleted file mode 100644 index 2aa9a34..0000000 --- a/benchmark/benchmark.5d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_rowmajor.js b/benchmark/benchmark.5d_blocked_rowmajor.js deleted file mode 100644 index 198f520..0000000 --- a/benchmark/benchmark.5d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_columnmajor.js b/benchmark/benchmark.5d_columnmajor.js deleted file mode 100644 index 81a2ce7..0000000 --- a/benchmark/benchmark.5d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_rowmajor.js b/benchmark/benchmark.5d_rowmajor.js deleted file mode 100644 index edafb5b..0000000 --- a/benchmark/benchmark.5d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_columnmajor.js b/benchmark/benchmark.6d_blocked_columnmajor.js deleted file mode 100644 index b2ca2ed..0000000 --- a/benchmark/benchmark.6d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_rowmajor.js b/benchmark/benchmark.6d_blocked_rowmajor.js deleted file mode 100644 index 367aecf..0000000 --- a/benchmark/benchmark.6d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_columnmajor.js b/benchmark/benchmark.6d_columnmajor.js deleted file mode 100644 index ccac30f..0000000 --- a/benchmark/benchmark.6d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_rowmajor.js b/benchmark/benchmark.6d_rowmajor.js deleted file mode 100644 index 2b6e55e..0000000 --- a/benchmark/benchmark.6d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_columnmajor.js b/benchmark/benchmark.7d_blocked_columnmajor.js deleted file mode 100644 index 5ca83ee..0000000 --- a/benchmark/benchmark.7d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_rowmajor.js b/benchmark/benchmark.7d_blocked_rowmajor.js deleted file mode 100644 index 4bb45b4..0000000 --- a/benchmark/benchmark.7d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_columnmajor.js b/benchmark/benchmark.7d_columnmajor.js deleted file mode 100644 index d80927c..0000000 --- a/benchmark/benchmark.7d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_rowmajor.js b/benchmark/benchmark.7d_rowmajor.js deleted file mode 100644 index 24571f8..0000000 --- a/benchmark/benchmark.7d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_columnmajor.js b/benchmark/benchmark.8d_blocked_columnmajor.js deleted file mode 100644 index 92b9f0b..0000000 --- a/benchmark/benchmark.8d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_rowmajor.js b/benchmark/benchmark.8d_blocked_rowmajor.js deleted file mode 100644 index 63a0c16..0000000 --- a/benchmark/benchmark.8d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_columnmajor.js b/benchmark/benchmark.8d_columnmajor.js deleted file mode 100644 index fd03c6a..0000000 --- a/benchmark/benchmark.8d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_rowmajor.js b/benchmark/benchmark.8d_rowmajor.js deleted file mode 100644 index 8d287ba..0000000 --- a/benchmark/benchmark.8d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_columnmajor.js b/benchmark/benchmark.9d_blocked_columnmajor.js deleted file mode 100644 index e722e1b..0000000 --- a/benchmark/benchmark.9d_blocked_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_rowmajor.js b/benchmark/benchmark.9d_blocked_rowmajor.js deleted file mode 100644 index c2591f7..0000000 --- a/benchmark/benchmark.9d_blocked_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_columnmajor.js b/benchmark/benchmark.9d_columnmajor.js deleted file mode 100644 index babd166..0000000 --- a/benchmark/benchmark.9d_columnmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_rowmajor.js b/benchmark/benchmark.9d_rowmajor.js deleted file mode 100644 index 11e35e2..0000000 --- a/benchmark/benchmark.9d_rowmajor.js +++ /dev/null @@ -1,152 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var randu = require( '@stdlib/random-base-randu' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var round = require( '@stdlib/math-base-special-round' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - var i; - - x = filledarray( 0.0, len, xtype ); - y = filledarray( 0.0, len, ytype ); - for ( i = 0; i < len; i++ ) { - x[ i ] = round( ( randu()*200.0 ) - 100.0 ); - } - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/branches.md b/branches.md deleted file mode 100644 index 458a893..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/ndarray/base/map" -%% click B href "https://github.com/stdlib-js/ndarray-base-map/tree/main" -%% click C href "https://github.com/stdlib-js/ndarray-base-map/tree/production" -%% click D href "https://github.com/stdlib-js/ndarray-base-map/tree/esm" -%% click E href "https://github.com/stdlib-js/ndarray-base-map/tree/deno" -%% click F href "https://github.com/stdlib-js/ndarray-base-map/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/map -[production-url]: https://github.com/stdlib-js/ndarray-base-map/tree/production -[deno-url]: https://github.com/stdlib-js/ndarray-base-map/tree/deno -[deno-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/ndarray-base-map/tree/umd -[umd-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/ndarray-base-map/tree/esm -[esm-readme]: https://github.com/stdlib-js/ndarray-base-map/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 4504e2e..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import map from '../docs/types/index'; -export = map; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index fd1d096..0000000 --- a/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict";var ur=function(a,v){return function(){return v||a((v={exports:{}}).exports,v),v.exports}};var Lr=ur(function(g0,Kr){"use strict";var hv=require("@stdlib/ndarray-base-unary-loop-interchange-order"),mv=require("@stdlib/ndarray-base-unary-tiling-block-size"),kv=require("@stdlib/array-base-take-indexed"),zv=require("@stdlib/array-base-reverse");function gv(a,v,U,Q){var r,V,K,L,I,B,E,M,T,D,C,O,S,s,h,c,k,q,g,i,j,f,u,o,x,e;for(e=hv(a.shape,a.strides,v.strides),S=e.sh,c=e.sx,k=e.sy,D=zv(e.idx),r=mv(a.dtype,v.dtype),q=a.offset,g=v.offset,V=a.data,K=v.data,L=c[0],B=k[0],x=S[1];x>0;)for(x0;)for(o0;)for(y0;)for(p0;)for(l0;)for(R0;)for(_0;)for(n0;)for(w0;)for(N0;)for(F0;)for(H0;)for(W0;)for(J0;)for(ir0;)for(ar0;)for(A0;)for(Z0;)for(Y0;)for(or0;)for(tr0;)for(fr0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(Sr0;)for(pr0;)for(yr0;)for(tr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(Mr0;)for(Er0;)for(Tr0;)for(Pr0;)for(Or0;)for(wr0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(u0;)for(f0;)for(l0;)for(d0;)for(m0;)for(n0;)for(w0;)for(t0;)for(z0;)for(H0;)for(W0;)for(J0;)for(G0;)for(X0;)for(A0;)for(Z0;)for(Y0;)for(or0;)for($0;)for(N0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(ir0;)for(ar0;)for(lr0;)for(cr0;)for(Sr0;)for(pr0;)for(yr0;)for(tr0;)for(fr0;)for(dr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(Tr0;)for(Pr0;)for(Or0;)for(wr0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder = require( '@stdlib/ndarray-base-iteration-order' );\nvar minmaxViewBufferIndex = require( '@stdlib/ndarray-base-minmax-view-buffer-index' );\nvar ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' );\nvar blockedaccessormap2d = require( './2d_blocked_accessors.js' );\nvar blockedaccessormap3d = require( './3d_blocked_accessors.js' );\nvar blockedaccessormap4d = require( './4d_blocked_accessors.js' );\nvar blockedaccessormap5d = require( './5d_blocked_accessors.js' );\nvar blockedaccessormap6d = require( './6d_blocked_accessors.js' );\nvar blockedaccessormap7d = require( './7d_blocked_accessors.js' );\nvar blockedaccessormap8d = require( './8d_blocked_accessors.js' );\nvar blockedaccessormap9d = require( './9d_blocked_accessors.js' );\nvar blockedaccessormap10d = require( './10d_blocked_accessors.js' );\nvar blockedmap2d = require( './2d_blocked.js' );\nvar blockedmap3d = require( './3d_blocked.js' );\nvar blockedmap4d = require( './4d_blocked.js' );\nvar blockedmap5d = require( './5d_blocked.js' );\nvar blockedmap6d = require( './6d_blocked.js' );\nvar blockedmap7d = require( './7d_blocked.js' );\nvar blockedmap8d = require( './8d_blocked.js' );\nvar blockedmap9d = require( './9d_blocked.js' );\nvar blockedmap10d = require( './10d_blocked.js' );\nvar accessormap0d = require( './0d_accessors.js' );\nvar accessormap1d = require( './1d_accessors.js' );\nvar accessormap2d = require( './2d_accessors.js' );\nvar accessormap3d = require( './3d_accessors.js' );\nvar accessormap4d = require( './4d_accessors.js' );\nvar accessormap5d = require( './5d_accessors.js' );\nvar accessormap6d = require( './6d_accessors.js' );\nvar accessormap7d = require( './7d_accessors.js' );\nvar accessormap8d = require( './8d_accessors.js' );\nvar accessormap9d = require( './9d_accessors.js' );\nvar accessormap10d = require( './10d_accessors.js' );\nvar accessormapnd = require( './nd_accessors.js' );\nvar map0d = require( './0d.js' );\nvar map1d = require( './1d.js' );\nvar map2d = require( './2d.js' );\nvar map3d = require( './3d.js' );\nvar map4d = require( './4d.js' );\nvar map5d = require( './5d.js' );\nvar map6d = require( './6d.js' );\nvar map7d = require( './7d.js' );\nvar map8d = require( './8d.js' );\nvar map9d = require( './9d.js' );\nvar map10d = require( './10d.js' );\nvar mapnd = require( './nd.js' );\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar xmmv;\n\tvar ymmv;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ns;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tns = 0; // number of singleton dimensions\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\n\t\t// Check whether the current dimension is a singleton dimension...\n\t\tif ( d === 1 ) {\n\t\t\tns += 1;\n\t\t}\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays...\n\tif ( ns === ndims-1 ) {\n\t\t// Get the index of the non-singleton dimension...\n\t\tfor ( i = 0; i < ndims; i++ ) {\n\t\t\tif ( shx[ i ] !== 1 ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tx.shape = [ shx[i] ];\n\t\ty.shape = x.shape;\n\t\tx.strides = [ sx[i] ];\n\t\ty.strides = [ sy[i] ];\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t}\n\n\tiox = iterationOrder( sx ); // +/-1\n\tioy = iterationOrder( sy ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine the minimum and maximum linear indices which are accessible by the array views:\n\t\txmmv = minmaxViewBufferIndex( shx, sx, x.offset );\n\t\tymmv = minmaxViewBufferIndex( shy, sy, y.offset );\n\n\t\t// Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays...\n\t\tif ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) {\n\t\t\t// Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values...\n\t\t\tif ( iox === 1 ) {\n\t\t\t\tox = xmmv[ 0 ];\n\t\t\t} else {\n\t\t\t\tox = xmmv[ 1 ];\n\t\t\t}\n\t\t\tif ( ioy === 1 ) {\n\t\t\t\toy = ymmv[ 0 ];\n\t\t\t} else {\n\t\t\t\toy = ymmv[ 1 ];\n\t\t\t}\n\t\t\tx.shape = [ len ];\n\t\t\ty.shape = x.shape;\n\t\t\tx.strides = [ iox ];\n\t\t\ty.strides = [ ioy ];\n\t\t\tx.offset = ox;\n\t\t\ty.offset = oy;\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality...\n\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration...\n\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray.\n*\n* @module @stdlib/ndarray-base-map\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var map = require( '@stdlib/ndarray-base-map' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\n\n// MODULES //\n\nvar main = require( './main.js' );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "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", - "names": ["require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "get", "set", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "get", "set", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "set", "get", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_accessors", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d_accessors", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "get", "set", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd_accessors", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "get", "set", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_d", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_main", "__commonJSMin", "exports", "module", "iterationOrder", "minmaxViewBufferIndex", "ndarray2object", "blockedaccessormap2d", "blockedaccessormap3d", "blockedaccessormap4d", "blockedaccessormap5d", "blockedaccessormap6d", "blockedaccessormap7d", "blockedaccessormap8d", "blockedaccessormap9d", "blockedaccessormap10d", "blockedmap2d", "blockedmap3d", "blockedmap4d", "blockedmap5d", "blockedmap6d", "blockedmap7d", "blockedmap8d", "blockedmap9d", "blockedmap10d", "accessormap0d", "accessormap1d", "accessormap2d", "accessormap3d", "accessormap4d", "accessormap5d", "accessormap6d", "accessormap7d", "accessormap8d", "accessormap9d", "accessormap10d", "accessormapnd", "map0d", "map1d", "map2d", "map3d", "map4d", "map5d", "map6d", "map7d", "map8d", "map9d", "map10d", "mapnd", "MAP", "ACCESSOR_MAP", "BLOCKED_MAP", "BLOCKED_ACCESSOR_MAP", "MAX_DIMS", "map", "arrays", "fcn", "thisArg", "ndims", "xmmv", "ymmv", "shx", "shy", "iox", "ioy", "len", "sx", "sy", "ox", "oy", "ns", "x", "y", "i", "d", "main"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index be30da1..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,78 +0,0 @@ - -{{alias}}( arrays, fcn[, thisArg] ) - Applies a callback function to elements in an input ndarray and assigns - results to elements in an output ndarray. - - Each provided "ndarray" should be an object with following properties: - - - dtype: data type. - - data: data buffer. - - shape: dimensions. - - strides: stride lengths. - - offset: index offset. - - order: specifies whether an ndarray is row-major (C-style) or column-major - (Fortran-style). - - The callback function is provided the following arguments: - - - value: current array element. - - indices: current array element indices. - - arr: the input ndarray. - - Parameters - ---------- - arrays: ArrayLikeObject - Array-like object containing one input ndarray and one output ndarray. - - fcn: Function - Callback function. - - thisArg: any (optional) - Callback function execution context. - - Examples - -------- - // Define ndarray data and meta data... - > var xbuf = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ybuf = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] ); - > var dtype = 'float64'; - > var shape = [ 2, 2 ]; - > var sx = [ 2, 1 ]; - > var sy = [ 2, 1 ]; - > var ox = 0; - > var oy = 0; - > var order = 'row-major'; - - // Define a callback function: - > function f( v ) { return v*10.0; }; - - // Using ndarrays... - > var x = {{alias:@stdlib/ndarray/ctor}}( dtype, xbuf, shape, sx, ox, order ); - > var y = {{alias:@stdlib/ndarray/ctor}}( dtype, ybuf, shape, sy, oy, order ); - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - // Using minimal ndarray-like objects... - > x = { - ... 'dtype': dtype, - ... 'data': xbuf, - ... 'shape': shape, - ... 'strides': sx, - ... 'offset': ox, - ... 'order': order - ... }; - > y = { - ... 'dtype': dtype, - ... 'data': ybuf, - ... 'shape': shape, - ... 'strides': sy, - ... 'offset': oy, - ... 'order': order - ... }; - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - See Also - -------- diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 7bc28dd..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/// - -import { ndarray } from '@stdlib/types/ndarray'; -import map = require( './index' ); - -/** -* Mock function to create an ndarray-like object. -* -* @return ndarray-like object -*/ -function array(): ndarray { - const obj: ndarray = { - 'byteLength': 80, - 'BYTES_PER_ELEMENT': 8, - 'data': new Float64Array( 10 ), - 'dtype': 'float64', - 'flags': { - 'ROW_MAJOR_CONTIGUOUS': true, - 'COLUMN_MAJOR_CONTIGUOUS': false - }, - 'length': 10, - 'ndims': 1, - 'offset': 0, - 'order': 'row-major', - 'shape': [ 10 ], - 'strides': [ 1 ], - 'get': (): number => 0, - 'set': (): ndarray => obj - }; - return obj; -} - -/** -* Evaluates the identity function. -* -* @param x - input value -* @returns input value -*/ -function identity( x: number ): number { - return x; -} - -// TESTS // - -// The function returns `undefined`... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, identity ); // $ExpectType void - map( arrays, identity, {} ); // $ExpectType void -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object containing ndarray-like objects... -{ - map( 5, identity ); // $ExpectError - map( true, identity ); // $ExpectError - map( false, identity ); // $ExpectError - map( null, identity ); // $ExpectError - map( undefined, identity ); // $ExpectError - map( {}, identity ); // $ExpectError - map( [ 1 ], identity ); // $ExpectError - map( ( x: number ): number => x, identity ); // $ExpectError - - map( 5, identity, {} ); // $ExpectError - map( true, identity, {} ); // $ExpectError - map( false, identity, {} ); // $ExpectError - map( null, identity, {} ); // $ExpectError - map( undefined, identity, {} ); // $ExpectError - map( {}, identity, {} ); // $ExpectError - map( [ 1 ], identity, {} ); // $ExpectError - map( ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a callback function... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, '10' ); // $ExpectError - map( arrays, 5 ); // $ExpectError - map( arrays, true ); // $ExpectError - map( arrays, false ); // $ExpectError - map( arrays, null ); // $ExpectError - map( arrays, undefined ); // $ExpectError - map( arrays, [] ); // $ExpectError - map( arrays, {} ); // $ExpectError - - map( arrays, '10', {} ); // $ExpectError - map( arrays, 5, {} ); // $ExpectError - map( arrays, true, {} ); // $ExpectError - map( arrays, false, {} ); // $ExpectError - map( arrays, null, {} ); // $ExpectError - map( arrays, undefined, {} ); // $ExpectError - map( arrays, [], {} ); // $ExpectError - map( arrays, {}, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map(); // $ExpectError - map( arrays ); // $ExpectError{ - map( arrays, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index d89ee00..0000000 --- a/examples/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var ndarray2array = require( '@stdlib/ndarray-base-to-array' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var map = require( './../lib' ); - -var N = 10; -var x = { - 'dtype': 'generic', - 'data': filledarrayBy( N, 'generic', discreteUniform( -100, 100 ) ), - 'shape': [ 5, 2 ], - 'strides': [ 2, 1 ], - 'offset': 0, - 'order': 'row-major' -}; -var y = { - 'dtype': 'generic', - 'data': filledarray( 0, N, 'generic' ), - 'shape': x.shape.slice(), - 'strides': shape2strides( x.shape, 'column-major' ), - 'offset': 0, - 'order': 'column-major' -}; - -map( [ x, y ], naryFunction( abs, 1 ) ); -console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); -console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 97% rename from docs/types/index.d.ts rename to index.d.ts index 78ac9b8..9dd6ef1 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -18,7 +18,7 @@ // TypeScript Version: 4.1 -/// +/// import { ArrayLike } from '@stdlib/types/array'; import { typedndarray } from '@stdlib/types/ndarray'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..65c1516 --- /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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-minmax-view-buffer-index@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@v0.2.1-esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import m from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import v from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@v0.2.2-esm/index.mjs";var y="throw";var j="throw";var u=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(yr0;)for(vr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(yr0;)for(vr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport minmaxViewBufferIndex from '@stdlib/ndarray-base-minmax-view-buffer-index';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar xmmv;\n\tvar ymmv;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ns;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tns = 0; // number of singleton dimensions\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\n\t\t// Check whether the current dimension is a singleton dimension...\n\t\tif ( d === 1 ) {\n\t\t\tns += 1;\n\t\t}\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays...\n\tif ( ns === ndims-1 ) {\n\t\t// Get the index of the non-singleton dimension...\n\t\tfor ( i = 0; i < ndims; i++ ) {\n\t\t\tif ( shx[ i ] !== 1 ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tx.shape = [ shx[i] ];\n\t\ty.shape = x.shape;\n\t\tx.strides = [ sx[i] ];\n\t\ty.strides = [ sy[i] ];\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t}\n\n\tiox = iterationOrder( sx ); // +/-1\n\tioy = iterationOrder( sy ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine the minimum and maximum linear indices which are accessible by the array views:\n\t\txmmv = minmaxViewBufferIndex( shx, sx, x.offset );\n\t\tymmv = minmaxViewBufferIndex( shy, sy, y.offset );\n\n\t\t// Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays...\n\t\tif ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) {\n\t\t\t// Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values...\n\t\t\tif ( iox === 1 ) {\n\t\t\t\tox = xmmv[ 0 ];\n\t\t\t} else {\n\t\t\t\tox = xmmv[ 1 ];\n\t\t\t}\n\t\t\tif ( ioy === 1 ) {\n\t\t\t\toy = ymmv[ 0 ];\n\t\t\t} else {\n\t\t\t\toy = ymmv[ 1 ];\n\t\t\t}\n\t\t\tx.shape = [ len ];\n\t\t\ty.shape = x.shape;\n\t\t\tx.strides = [ iox ];\n\t\t\ty.strides = [ ioy ];\n\t\t\tx.offset = ox;\n\t\t\ty.offset = oy;\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality...\n\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration...\n\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","xmmv","ymmv","shx","shy","iox","ioy","len","ns","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","minmaxViewBufferIndex","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":";;yjDA6BA,IAAIA,EAAO,QCAX,IAAIA,EAAO,QC0CX,IAAIC,EAAM,CCqBV,SAAgBC,EAAGC,EAAGC,EAAKC,GAC1BF,EAAEG,KAAMH,EAAEI,QAAWH,EAAII,KAAMH,EAASH,EAAEI,KAAMJ,EAAEK,QAAU,GAAIL,EAAEO,IACnE,ECFA,SAAgBP,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAkBJ,IAbAH,EAAKZ,EAAEgB,MAAO,GACdN,EAAMV,EAAEiB,QAAS,GACjBN,EAAMV,EAAEgB,QAAS,GAGjBJ,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGHW,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAM,CAAEE,GAAMf,EAAEO,KACtDM,GAAMH,EACNI,GAAMH,CAER,ECxBA,SAAgBX,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAC,EACAQ,EACAP,EACAQ,EACAC,EACAC,EACAT,EACAU,EACAC,EACAC,EACAX,EACAC,EACAC,EACAU,EAoCJ,IA/BAJ,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGW,EAAG,GACxBH,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGHqB,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEL,EAAIV,GAAMK,GAAOpB,EAAEO,KACvEM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACF,EC7DA,SAAgBnB,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAC,EACAQ,EACAa,EACApB,EACAQ,EACAa,EACAZ,EACAC,EACAT,EACAU,EACAW,EACAV,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EA0CJ,IArCAb,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGH8B,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEI,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KAC3EM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACF,EC3EA,SAAgBhC,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAxB,EACAQ,EACAa,EACAI,EACAhB,EACAC,EACAT,EACAU,EACAW,EACAI,EACAd,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EAgDJ,IA3CAjB,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGHkC,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEQ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KAC/EM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACF,ECzFA,SAAgBpC,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAI,EACA5B,EACAQ,EACAa,EACAI,EACAI,EACApB,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAlB,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EAsDJ,IAjDArB,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGHsC,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEY,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KACnFM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACF,ECrGA,SAAgBxC,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAhC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAxB,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAtB,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAI,EA4DJ,IAvDAzB,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGH0C,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEgB,EAAIJ,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KACvFM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CACF,ECrHA,SAAgB5C,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACApC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACA5B,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACA1B,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAI,EACAI,EAkEJ,IA7DA7B,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGH8C,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEoB,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KAC3FM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CACD/B,GAAMkC,EACNjC,GAAMkC,CACN,CACF,ECnIA,SAAgBhD,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAxC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAhC,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACAI,EACA9B,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAI,EACAI,EACAI,EAwEJ,IAnEAjC,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTgC,EAAKhC,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQ0B,EAAG1B,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQyB,EAAGzB,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTgC,EAAKhC,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQ0B,EAAG1B,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQyB,EAAGzB,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGHkD,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEwB,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KAC/FM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CACD/B,GAAMkC,EACNjC,GAAMkC,CACN,CACDnC,GAAMsC,EACNrC,GAAMsC,CACN,CACF,ECjJA,SAAgBpD,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACA5C,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACApC,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAlC,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EA8EJ,IAzEArC,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTgC,EAAKhC,EAAI,GACToC,EAAKpC,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQ0B,EAAG1B,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ8B,EAAG9B,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQyB,EAAGzB,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ6B,EAAG7B,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTgC,EAAKhC,EAAI,GACToC,EAAKpC,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQ0B,EAAG1B,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ8B,EAAG9B,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQyB,EAAGzB,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ6B,EAAG7B,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGHsD,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAE4B,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KACnGM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CACD/B,GAAMkC,EACNjC,GAAMkC,CACN,CACDnC,GAAMsC,EACNrC,GAAMsC,CACN,CACDvC,GAAM0C,EACNzC,GAAM0C,CACN,CACF,EC/JA,SAAiBxD,EAAGC,EAAGC,EAAKC,GAC3B,IAAIK,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAhD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAxC,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAtC,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,GAoFJ,IA/EAzC,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTgC,EAAKhC,EAAI,GACToC,EAAKpC,EAAI,GACTwC,EAAKxC,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQ0B,EAAG1B,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ8B,EAAG9B,EAAG,GACxBoC,EAAMpC,EAAI,GAAQkC,EAAGlC,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQyB,EAAGzB,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ6B,EAAG7B,EAAG,GACxBoC,EAAMpC,EAAI,GAAQiC,EAAGjC,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTgC,EAAKhC,EAAI,GACToC,EAAKpC,EAAI,GACTwC,EAAKxC,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQ0B,EAAG1B,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ8B,EAAG9B,EAAG,GACxBoC,EAAMpC,EAAI,GAAQkC,EAAGlC,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQyB,EAAGzB,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ6B,EAAG7B,EAAG,GACxBoC,EAAMpC,EAAI,GAAQiC,EAAGjC,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGH0D,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEgC,GAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KACvGM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CACD/B,GAAMkC,EACNjC,GAAMkC,CACN,CACDnC,GAAMsC,EACNrC,GAAMsC,CACN,CACDvC,GAAM0C,EACNzC,GAAM0C,CACN,CACD3C,GAAM8C,EACN7C,GAAM8C,CACN,CACF,GX9LIG,EAAe,CY6BnB,SAAgB/D,EAAGC,EAAGC,EAAKC,GAC1BF,EAAE+D,UAAW,GAAK/D,EAAEG,KAAMH,EAAEI,OAAQH,EAAII,KAAMH,EAASH,EAAEgE,UAAW,GAAKhE,EAAEI,KAAMJ,EAAEK,QAAU,GAAIL,EAAEO,KACpG,ECJA,SAAgBP,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAwD,EACAC,EACAxD,EACAC,EACAC,EACAC,EACAC,EACAC,EAsBJ,IAjBAH,EAAKZ,EAAEgB,MAAO,GACdN,EAAMV,EAAEiB,QAAS,GACjBN,EAAMV,EAAEgB,QAAS,GAGjBJ,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGT6D,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGbjD,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAM,CAAEE,GAAMf,EAAEO,MAC7DM,GAAMH,EACNI,GAAMH,CAER,EC9BA,SAAgBX,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAP,EACAQ,EACAC,EACAC,EACAT,EACAU,EACAC,EACAC,EACAX,EACAC,EACAC,EACAU,EAwCJ,IAnCAJ,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGW,EAAG,GACxBH,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGT6D,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGbvC,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEL,EAAIV,GAAMK,GAAOpB,EAAEO,MAC9EM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACF,ECnEA,SAAgBnB,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAC,EACAQ,EACAa,EACApB,EACAQ,EACAa,EACAZ,EACA6C,EACAC,EACA7C,EACAT,EACAU,EACAW,EACAV,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EA8CJ,IAzCAb,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGT6D,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGb9B,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEI,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,MAClFM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACF,ECjFA,SAAgBhC,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAxB,EACAQ,EACAa,EACAI,EACAhB,EACAC,EACAT,EACAU,EACAW,EACAI,EACAd,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EAoDJ,IA/CAjB,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGT6D,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGb1B,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEQ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,MACtFM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACF,EC/FA,SAAgBpC,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAI,EACA5B,EACAQ,EACAa,EACAI,EACAI,EACApB,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAlB,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EA0DJ,IArDArB,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGT6D,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGbtB,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEY,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,MAC1FM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACF,EC3GA,SAAgBxC,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAhC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAxB,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAtB,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAI,EAgEJ,IA3DAzB,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGT6D,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGblB,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEgB,EAAIJ,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,MAC9FM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CACF,EC3HA,SAAgB5C,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACApC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACA5B,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACA1B,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAI,EACAI,EAsEJ,IAjEA7B,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGT6D,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGbd,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEoB,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,MAClGM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CACD/B,GAAMkC,EACNjC,GAAMkC,CACN,CACF,ECzIA,SAAgBhD,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAxC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAhC,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACAI,EACA9B,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAI,EACAI,EACAI,EA4EJ,IAvEAjC,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTgC,EAAKhC,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQ0B,EAAG1B,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQyB,EAAGzB,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTgC,EAAKhC,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQ0B,EAAG1B,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQyB,EAAGzB,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGT6D,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGbV,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEwB,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,MACtGM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CACD/B,GAAMkC,EACNjC,GAAMkC,CACN,CACDnC,GAAMsC,EACNrC,GAAMsC,CACN,CACF,ECvJA,SAAgBpD,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACA5C,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACApC,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAlC,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EAkFJ,IA7EArC,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTgC,EAAKhC,EAAI,GACToC,EAAKpC,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQ0B,EAAG1B,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ8B,EAAG9B,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQyB,EAAGzB,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ6B,EAAG7B,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTgC,EAAKhC,EAAI,GACToC,EAAKpC,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQ0B,EAAG1B,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ8B,EAAG9B,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQyB,EAAGzB,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ6B,EAAG7B,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGT6D,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGbN,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAE4B,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,MAC1GM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CACD/B,GAAMkC,EACNjC,GAAMkC,CACN,CACDnC,GAAMsC,EACNrC,GAAMsC,CACN,CACDvC,GAAM0C,EACNzC,GAAM0C,CACN,CACF,ECrKA,SAAiBxD,EAAGC,EAAGC,EAAKC,GAC3B,IAAIK,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAhD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAxC,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAtC,EACAC,EACAX,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAI,EACAI,EACAI,GACAI,GACAI,GAwFJ,IAnFAzC,EAAKrB,EAAEgB,MACPO,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QACPG,EAAMM,EAAQL,EAAGM,QACA,cAAZ3B,EAAE4B,OAENhB,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTgC,EAAKhC,EAAI,GACToC,EAAKpC,EAAI,GACTwC,EAAKxC,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQ0B,EAAG1B,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ8B,EAAG9B,EAAG,GACxBoC,EAAMpC,EAAI,GAAQkC,EAAGlC,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQyB,EAAGzB,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ6B,EAAG7B,EAAG,GACxBoC,EAAMpC,EAAI,GAAQiC,EAAGjC,EAAG,KAGxBZ,EAAKS,EAAI,GACTC,EAAKD,EAAI,GACTY,EAAKZ,EAAI,GACTgB,EAAKhB,EAAI,GACToB,EAAKpB,EAAI,GACTwB,EAAKxB,EAAI,GACT4B,EAAK5B,EAAI,GACTgC,EAAKhC,EAAI,GACToC,EAAKpC,EAAI,GACTwC,EAAKxC,EAAI,GACTX,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQX,EAAGW,EAAG,GACxBQ,EAAMR,EAAI,GAAQD,EAAGC,EAAG,GACxBY,EAAMZ,EAAI,GAAQU,EAAGV,EAAG,GACxBgB,EAAMhB,EAAI,GAAQc,EAAGd,EAAG,GACxBoB,EAAMpB,EAAI,GAAQkB,EAAGlB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQsB,EAAGtB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQ0B,EAAG1B,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ8B,EAAG9B,EAAG,GACxBoC,EAAMpC,EAAI,GAAQkC,EAAGlC,EAAG,GACxBZ,EAAMa,EAAI,GACVL,EAAMK,EAAI,GAAQZ,EAAGY,EAAG,GACxBQ,EAAMR,EAAI,GAAQF,EAAGE,EAAG,GACxBY,EAAMZ,EAAI,GAAQS,EAAGT,EAAG,GACxBgB,EAAMhB,EAAI,GAAQa,EAAGb,EAAG,GACxBoB,EAAMpB,EAAI,GAAQiB,EAAGjB,EAAG,GACxBwB,EAAMxB,EAAI,GAAQqB,EAAGrB,EAAG,GACxB4B,EAAM5B,EAAI,GAAQyB,EAAGzB,EAAG,GACxBgC,EAAMhC,EAAI,GAAQ6B,EAAG7B,EAAG,GACxBoC,EAAMpC,EAAI,GAAQiC,EAAGjC,EAAG,GACxBJ,EAAMS,EAAST,IAGhBP,EAAKb,EAAEK,OACPS,EAAKb,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGT6D,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGbF,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEgC,GAAIJ,GAAIJ,GAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,MAC9GM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CACD/B,GAAMkC,EACNjC,GAAMkC,CACN,CACDnC,GAAMsC,EACNrC,GAAMsC,CACN,CACDvC,GAAM0C,EACNzC,GAAM0C,CACN,CACD3C,GAAM8C,EACN7C,GAAM8C,CACN,CACF,GtB1MIO,EAAc,CuBGlB,SAAuBnE,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAC,EACAQ,EACAP,EACAQ,EACAkD,EACAC,EACAlD,EACAC,EACAkD,EACAC,EACAjD,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAC,EACAU,EACAkD,EACAC,EACAC,EA2BJ,IArBAxD,GADAwD,EAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,EAAEtD,GACPC,EAAKqD,EAAErD,GACPJ,EAAMS,EAASgD,EAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGHoD,EAAKvD,EAAG,GAAIuD,EAAK,GAUtB,IATKA,EAAKR,GACTI,EAAKI,EACLA,EAAK,IAELJ,EAAKJ,EACLQ,GAAMR,GAEPC,EAAMI,EAAOG,EAAGrD,EAAG,GACnB+C,EAAMI,EAAOE,EAAGpD,EAAG,GACbmD,EAAKtD,EAAG,GAAIsD,EAAK,GAiBtB,IAhBKA,EAAKP,GACTG,EAAKI,EACLA,EAAK,IAELJ,EAAKH,EACLO,GAAMP,GAGPvD,EAAKwD,EAAOM,EAAGpD,EAAG,GAClBT,EAAKwD,EAAOK,EAAGnD,EAAG,GAGlBN,EAAMK,EAAG,GAAMgD,EAAGhD,EAAG,GACrBJ,EAAMK,EAAG,GAAM+C,EAAG/C,EAAG,GAGfC,EAAK,EAAGA,EAAK+C,EAAI/C,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKwD,EAAIxD,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEL,EAAIV,GAAMK,GAAOpB,EAAEO,KACvEM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CAGJ,ECvFA,SAAuBnB,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAC,EACAQ,EACAa,EACApB,EACAQ,EACAa,EACAqC,EACAY,EACAX,EACAY,EACA9D,EACAC,EACAkD,EACAC,EACAW,EACA5D,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAC,EACAU,EACAS,EACAyC,EACAC,EACAQ,EACAP,EA2BJ,IArBAxD,GADAwD,EAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,EAAEtD,GACPC,EAAKqD,EAAErD,GACPJ,EAAMS,EAASgD,EAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGH4D,EAAK/D,EAAG,GAAI+D,EAAK,GAUtB,IATKA,EAAKhB,GACTe,EAAKC,EACLA,EAAK,IAELD,EAAKf,EACLgB,GAAMhB,GAEPa,EAAMR,EAAOW,EAAG7D,EAAG,GACnB2D,EAAMR,EAAOU,EAAG5D,EAAG,GACboD,EAAKvD,EAAG,GAAIuD,EAAK,GAYtB,IAXKA,EAAKR,GACTI,EAAKI,EACLA,EAAK,IAELJ,EAAKJ,EACLQ,GAAMR,GAEPrC,EAAMR,EAAG,GAAOiD,EAAGjD,EAAG,GACtBS,EAAMR,EAAG,GAAOgD,EAAGhD,EAAG,GACtB6C,EAAMY,EAAQL,EAAGrD,EAAG,GACpB+C,EAAMY,EAAQN,EAAGpD,EAAG,GACdmD,EAAKtD,EAAG,GAAIsD,EAAK,GAiBtB,IAhBKA,EAAKP,GACTG,EAAKI,EACLA,EAAK,IAELJ,EAAKH,EACLO,GAAMP,GAGPvD,EAAKwD,EAAQM,EAAGpD,EAAG,GACnBT,EAAKwD,EAAQK,EAAGnD,EAAG,GAGnBN,EAAMK,EAAG,GAAOgD,EAAGhD,EAAG,GACtBJ,EAAMK,EAAG,GAAO+C,EAAG/C,EAAG,GAGhBU,EAAK,EAAGA,EAAKiD,EAAIjD,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAK+C,EAAI/C,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKwD,EAAIxD,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEI,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KAC3EM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CAIL,ECjHA,SAAuBhC,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAxB,EACAQ,EACAa,EACAI,EACAiC,EACAY,EACAI,EACAjE,EACAkD,EACAY,EACAI,EACAjE,EACAT,EACAU,EACAW,EACAI,EACAd,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAC,EACAU,EACAS,EACAI,EACAqC,EACAC,EACAQ,EACAG,EACAV,EA2BJ,IArBAxD,GADAwD,EAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,EAAEtD,GACPC,EAAKqD,EAAErD,GACPJ,EAAMS,EAASgD,EAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGH+D,EAAKlE,EAAG,GAAIkE,EAAK,GAUtB,IATKA,EAAKnB,GACT/B,EAAKkD,EACLA,EAAK,IAELlD,EAAK+B,EACLmB,GAAMnB,GAEPiB,EAAMZ,EAAOc,EAAGhE,EAAG,GACnB+D,EAAMZ,EAAOa,EAAG/D,EAAG,GACb4D,EAAK/D,EAAG,GAAI+D,EAAK,GAYtB,IAXKA,EAAKhB,GACTnC,EAAKmD,EACLA,EAAK,IAELnD,EAAKmC,EACLgB,GAAMhB,GAEPjC,EAAMZ,EAAG,GAAOU,EAAGV,EAAG,GACtBa,EAAMZ,EAAG,GAAOS,EAAGT,EAAG,GACtByD,EAAMI,EAAQD,EAAG7D,EAAG,GACpB2D,EAAMI,EAAQF,EAAG5D,EAAG,GACdoD,EAAKvD,EAAG,GAAIuD,EAAK,GAYtB,IAXKA,EAAKR,GACT9C,EAAKsD,EACLA,EAAK,IAELtD,EAAK8C,EACLQ,GAAMR,GAEPrC,EAAMR,EAAG,GAAOD,EAAGC,EAAG,GACtBS,EAAMR,EAAG,GAAOF,EAAGE,EAAG,GACtB6C,EAAMY,EAAQL,EAAGrD,EAAG,GACpB+C,EAAMY,EAAQN,EAAGpD,EAAG,GACdmD,EAAKtD,EAAG,GAAIsD,EAAK,GAiBtB,IAhBKA,EAAKP,GACTxD,EAAK+D,EACLA,EAAK,IAEL/D,EAAKwD,EACLO,GAAMP,GAGPvD,EAAKwD,EAAQM,EAAGpD,EAAG,GACnBT,EAAKwD,EAAQK,EAAGnD,EAAG,GAGnBN,EAAMK,EAAG,GAAOX,EAAGW,EAAG,GACtBJ,EAAMK,EAAG,GAAOZ,EAAGY,EAAG,GAGhBc,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEQ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KAC/EM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CAKN,ECzIA,SAAuBpC,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAI,EACA5B,EACAQ,EACAa,EACAI,EACAI,EACA6B,EACAY,EACAI,EACAG,EACApE,EACAkD,EACAY,EACAI,EACAG,EACApE,EACAT,EACAU,EACAW,EACAI,EACAI,EACAlB,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAiC,EACAC,EACAQ,EACAG,EACAG,EACAb,EA2BJ,IArBAxD,GADAwD,EAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,EAAEtD,GACPC,EAAKqD,EAAErD,GACPJ,EAAMS,EAASgD,EAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGHkE,EAAKrE,EAAG,GAAIqE,EAAK,GAUtB,IATKA,EAAKtB,GACT3B,EAAKiD,EACLA,EAAK,IAELjD,EAAK2B,EACLsB,GAAMtB,GAEPoB,EAAMf,EAAOiB,EAAGnE,EAAG,GACnBkE,EAAMf,EAAOgB,EAAGlE,EAAG,GACb+D,EAAKlE,EAAG,GAAIkE,EAAK,GAYtB,IAXKA,EAAKnB,GACT/B,EAAKkD,EACLA,EAAK,IAELlD,EAAK+B,EACLmB,GAAMnB,GAEP7B,EAAMhB,EAAG,GAAOc,EAAGd,EAAG,GACtBiB,EAAMhB,EAAG,GAAOa,EAAGb,EAAG,GACtB6D,EAAMG,EAAQD,EAAGhE,EAAG,GACpB+D,EAAMG,EAAQF,EAAG/D,EAAG,GACd4D,EAAK/D,EAAG,GAAI+D,EAAK,GAYtB,IAXKA,EAAKhB,GACTnC,EAAKmD,EACLA,EAAK,IAELnD,EAAKmC,EACLgB,GAAMhB,GAEPjC,EAAMZ,EAAG,GAAOU,EAAGV,EAAG,GACtBa,EAAMZ,EAAG,GAAOS,EAAGT,EAAG,GACtByD,EAAMI,EAAQD,EAAG7D,EAAG,GACpB2D,EAAMI,EAAQF,EAAG5D,EAAG,GACdoD,EAAKvD,EAAG,GAAIuD,EAAK,GAYtB,IAXKA,EAAKR,GACT9C,EAAKsD,EACLA,EAAK,IAELtD,EAAK8C,EACLQ,GAAMR,GAEPrC,EAAMR,EAAG,GAAOD,EAAGC,EAAG,GACtBS,EAAMR,EAAG,GAAOF,EAAGE,EAAG,GACtB6C,EAAMY,EAAQL,EAAGrD,EAAG,GACpB+C,EAAMY,EAAQN,EAAGpD,EAAG,GACdmD,EAAKtD,EAAG,GAAIsD,EAAK,GAiBtB,IAhBKA,EAAKP,GACTxD,EAAK+D,EACLA,EAAK,IAEL/D,EAAKwD,EACLO,GAAMP,GAGPvD,EAAKwD,EAAQM,EAAGpD,EAAG,GACnBT,EAAKwD,EAAQK,EAAGnD,EAAG,GAGnBN,EAAMK,EAAG,GAAOX,EAAGW,EAAG,GACtBJ,EAAMK,EAAG,GAAOZ,EAAGY,EAAG,GAGhBkB,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEY,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KACnFM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CAMP,ECjKA,SAAuBxC,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAhC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAyB,EACAY,EACAI,EACAG,EACAG,EACArB,EACAY,EACAI,EACAG,EACAG,EACAxE,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAtB,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAI,EACA6B,EACAC,GACAQ,GACAG,GACAG,GACAG,GACAhB,GA2BJ,IArBAxD,GADAwD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,GAAEtD,GACPC,EAAKqD,GAAErD,GACPJ,EAAMS,EAASgD,GAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGHqE,GAAKxE,EAAG,GAAIwE,GAAK,GAUtB,IATKA,GAAKzB,GACTvB,EAAKgD,GACLA,GAAK,IAELhD,EAAKuB,EACLyB,IAAMzB,GAEPuB,EAAMlB,EAAOoB,GAAGtE,EAAG,GACnBqE,EAAMlB,EAAOmB,GAAGrE,EAAG,GACbkE,GAAKrE,EAAG,GAAIqE,GAAK,GAYtB,IAXKA,GAAKtB,GACT3B,EAAKiD,GACLA,GAAK,IAELjD,EAAK2B,EACLsB,IAAMtB,GAEPzB,EAAMpB,EAAG,GAAOkB,EAAGlB,EAAG,GACtBqB,EAAMpB,EAAG,GAAOiB,EAAGjB,EAAG,GACtBgE,EAAMG,EAAQD,GAAGnE,EAAG,GACpBkE,EAAMG,EAAQF,GAAGlE,EAAG,GACd+D,GAAKlE,EAAG,GAAIkE,GAAK,GAYtB,IAXKA,GAAKnB,GACT/B,EAAKkD,GACLA,GAAK,IAELlD,EAAK+B,EACLmB,IAAMnB,GAEP7B,EAAMhB,EAAG,GAAOc,EAAGd,EAAG,GACtBiB,EAAMhB,EAAG,GAAOa,EAAGb,EAAG,GACtB6D,EAAMG,EAAQD,GAAGhE,EAAG,GACpB+D,EAAMG,EAAQF,GAAG/D,EAAG,GACd4D,GAAK/D,EAAG,GAAI+D,GAAK,GAYtB,IAXKA,GAAKhB,GACTnC,EAAKmD,GACLA,GAAK,IAELnD,EAAKmC,EACLgB,IAAMhB,GAEPjC,EAAMZ,EAAG,GAAOU,EAAGV,EAAG,GACtBa,EAAMZ,EAAG,GAAOS,EAAGT,EAAG,GACtByD,EAAMI,EAAQD,GAAG7D,EAAG,GACpB2D,EAAMI,EAAQF,GAAG5D,EAAG,GACdoD,GAAKvD,EAAG,GAAIuD,GAAK,GAYtB,IAXKA,GAAKR,GACT9C,EAAKsD,GACLA,GAAK,IAELtD,EAAK8C,EACLQ,IAAMR,GAEPrC,EAAMR,EAAG,GAAOD,EAAGC,EAAG,GACtBS,EAAMR,EAAG,GAAOF,EAAGE,EAAG,GACtB6C,EAAMY,EAAQL,GAAGrD,EAAG,GACpB+C,EAAMY,EAAQN,GAAGpD,EAAG,GACdmD,EAAKtD,EAAG,GAAIsD,EAAK,GAiBtB,IAhBKA,EAAKP,GACTxD,EAAK+D,EACLA,EAAK,IAEL/D,EAAKwD,EACLO,GAAMP,GAGPvD,EAAKwD,EAAQM,EAAGpD,EAAG,GACnBT,EAAKwD,EAAQK,EAAGnD,EAAG,GAGnBN,EAAMK,EAAG,GAAOX,EAAGW,EAAG,GACtBJ,EAAMK,EAAG,GAAOZ,EAAGY,EAAG,GAGhBsB,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEgB,EAAIJ,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KACvFM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CAOR,ECzLA,SAAuB5C,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACApC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAqB,EACAY,EACAI,EACAG,EACAG,EACAG,EACAxB,EACAY,EACAI,EACAG,EACAG,EACAG,EACA3E,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACA1B,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAC,EACAU,EACAS,GACAI,GACAI,GACAI,GACAI,GACAyB,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAnB,GA2BJ,IArBAxD,GADAwD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,GAAEtD,GACPC,EAAKqD,GAAErD,GACPJ,EAAMS,EAASgD,GAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGHwE,GAAK3E,EAAG,GAAI2E,GAAK,GAUtB,IATKA,GAAK5B,GACTnB,EAAK+C,GACLA,GAAK,IAEL/C,EAAKmB,EACL4B,IAAM5B,GAEP0B,EAAMrB,EAAOuB,GAAGzE,EAAG,GACnBwE,EAAMrB,EAAOsB,GAAGxE,EAAG,GACbqE,GAAKxE,EAAG,GAAIwE,GAAK,GAYtB,IAXKA,GAAKzB,GACTvB,EAAKgD,GACLA,GAAK,IAELhD,EAAKuB,EACLyB,IAAMzB,GAEPrB,EAAMxB,EAAG,GAAOsB,EAAGtB,EAAG,GACtByB,EAAMxB,EAAG,GAAOqB,EAAGrB,EAAG,GACtBmE,EAAMG,EAAQD,GAAGtE,EAAG,GACpBqE,EAAMG,EAAQF,GAAGrE,EAAG,GACdkE,GAAKrE,EAAG,GAAIqE,GAAK,GAYtB,IAXKA,GAAKtB,GACT3B,EAAKiD,GACLA,GAAK,IAELjD,EAAK2B,EACLsB,IAAMtB,GAEPzB,EAAMpB,EAAG,GAAOkB,EAAGlB,EAAG,GACtBqB,EAAMpB,EAAG,GAAOiB,EAAGjB,EAAG,GACtBgE,EAAMG,EAAQD,GAAGnE,EAAG,GACpBkE,EAAMG,EAAQF,GAAGlE,EAAG,GACd+D,GAAKlE,EAAG,GAAIkE,GAAK,GAYtB,IAXKA,GAAKnB,GACT/B,EAAKkD,GACLA,GAAK,IAELlD,EAAK+B,EACLmB,IAAMnB,GAEP7B,EAAMhB,EAAG,GAAOc,EAAGd,EAAG,GACtBiB,EAAMhB,EAAG,GAAOa,EAAGb,EAAG,GACtB6D,EAAMG,EAAQD,GAAGhE,EAAG,GACpB+D,EAAMG,EAAQF,GAAG/D,EAAG,GACd4D,GAAK/D,EAAG,GAAI+D,GAAK,GAYtB,IAXKA,GAAKhB,GACTnC,EAAKmD,GACLA,GAAK,IAELnD,EAAKmC,EACLgB,IAAMhB,GAEPjC,EAAMZ,EAAG,GAAOU,EAAGV,EAAG,GACtBa,EAAMZ,EAAG,GAAOS,EAAGT,EAAG,GACtByD,EAAMI,EAAQD,GAAG7D,EAAG,GACpB2D,EAAMI,EAAQF,GAAG5D,EAAG,GACdoD,GAAKvD,EAAG,GAAIuD,GAAK,GAYtB,IAXKA,GAAKR,GACT9C,EAAKsD,GACLA,GAAK,IAELtD,EAAK8C,EACLQ,IAAMR,GAEPrC,EAAMR,EAAG,GAAOD,EAAGC,EAAG,GACtBS,EAAMR,EAAG,GAAOF,EAAGE,EAAG,GACtB6C,EAAMY,EAAQL,GAAGrD,EAAG,GACpB+C,EAAMY,EAAQN,GAAGpD,EAAG,GACdmD,GAAKtD,EAAG,GAAIsD,GAAK,GAiBtB,IAhBKA,GAAKP,GACTxD,EAAK+D,GACLA,GAAK,IAEL/D,EAAKwD,EACLO,IAAMP,GAGPvD,EAAKwD,EAAQM,GAAGpD,EAAG,GACnBT,EAAKwD,EAAQK,GAAGnD,EAAG,GAGnBN,EAAMK,EAAG,GAAOX,EAAGW,EAAG,GACtBJ,EAAMK,EAAG,GAAOZ,EAAGY,EAAG,GAGhB0B,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBN,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMiB,EAAM,CAAEoB,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,KAC3FM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CACD/B,GAAMkC,EACNjC,GAAMkC,CACN,CAQT,ECjNA,SAAuBhD,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAxC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAiB,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACA3B,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACA9E,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACAI,EACA9B,EACAC,EACAiD,EACAC,GACA7D,GACAC,GACAC,GACAU,GACAS,GACAI,GACAI,GACAI,GACAI,GACAI,GACAqB,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAG,GACAtB,GA2BJ,IArBAxD,GADAwD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,GAAEtD,GACPC,EAAKqD,GAAErD,GACPJ,EAAMS,EAASgD,GAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,GAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGH2E,GAAK9E,EAAG,GAAI8E,GAAK,GAUtB,IATKA,GAAK/B,GACTf,EAAK8C,GACLA,GAAK,IAEL9C,EAAKe,EACL+B,IAAM/B,GAEP6B,EAAMxB,EAAO0B,GAAG5E,EAAG,GACnB2E,EAAMxB,GAAOyB,GAAG3E,EAAG,GACbwE,GAAK3E,EAAG,GAAI2E,GAAK,GAYtB,IAXKA,GAAK5B,GACTnB,EAAK+C,GACLA,GAAK,IAEL/C,EAAKmB,EACL4B,IAAM5B,GAEPjB,EAAM5B,EAAG,GAAO0B,EAAG1B,EAAG,GACtB6B,EAAM5B,EAAG,GAAOyB,EAAGzB,EAAG,GACtBsE,EAAMG,EAAQD,GAAGzE,EAAG,GACpBwE,EAAMG,EAAQF,GAAGxE,EAAG,GACdqE,GAAKxE,EAAG,GAAIwE,GAAK,GAYtB,IAXKA,GAAKzB,GACTvB,EAAKgD,GACLA,GAAK,IAELhD,EAAKuB,EACLyB,IAAMzB,GAEPrB,EAAMxB,EAAG,GAAOsB,EAAGtB,EAAG,GACtByB,EAAMxB,EAAG,GAAOqB,EAAGrB,EAAG,GACtBmE,EAAMG,EAAQD,GAAGtE,EAAG,GACpBqE,EAAMG,EAAQF,GAAGrE,EAAG,GACdkE,GAAKrE,EAAG,GAAIqE,GAAK,GAYtB,IAXKA,GAAKtB,GACT3B,EAAKiD,GACLA,GAAK,IAELjD,EAAK2B,EACLsB,IAAMtB,GAEPzB,EAAMpB,EAAG,GAAOkB,EAAGlB,EAAG,GACtBqB,EAAMpB,EAAG,GAAOiB,EAAGjB,EAAG,GACtBgE,EAAMG,EAAQD,GAAGnE,EAAG,GACpBkE,EAAMG,EAAQF,GAAGlE,EAAG,GACd+D,GAAKlE,EAAG,GAAIkE,GAAK,GAYtB,IAXKA,GAAKnB,GACT/B,EAAKkD,GACLA,GAAK,IAELlD,EAAK+B,EACLmB,IAAMnB,GAEP7B,EAAMhB,EAAG,GAAOc,EAAGd,EAAG,GACtBiB,EAAMhB,EAAG,GAAOa,EAAGb,EAAG,GACtB6D,EAAMG,EAAQD,GAAGhE,EAAG,GACpB+D,EAAMG,EAAQF,GAAG/D,EAAG,GACd4D,GAAK/D,EAAG,GAAI+D,GAAK,GAYtB,IAXKA,GAAKhB,GACTnC,EAAKmD,GACLA,GAAK,IAELnD,EAAKmC,EACLgB,IAAMhB,GAEPjC,EAAMZ,EAAG,GAAOU,EAAGV,EAAG,GACtBa,EAAMZ,EAAG,GAAOS,EAAGT,EAAG,GACtByD,EAAMI,EAAQD,GAAG7D,EAAG,GACpB2D,EAAMI,EAAQF,GAAG5D,EAAG,GACdoD,GAAKvD,EAAG,GAAIuD,GAAK,GAYtB,IAXKA,GAAKR,GACT9C,EAAKsD,GACLA,GAAK,IAELtD,EAAK8C,EACLQ,IAAMR,GAEPrC,EAAMR,EAAG,GAAOD,EAAGC,EAAG,GACtBS,EAAMR,EAAG,GAAOF,EAAGE,EAAG,GACtB6C,EAAMY,EAAQL,GAAGrD,EAAG,GACpB+C,EAAMY,EAAQN,GAAGpD,EAAG,GACdmD,GAAKtD,EAAG,GAAIsD,GAAK,GAiBtB,IAhBKA,GAAKP,GACTxD,EAAK+D,GACLA,GAAK,IAEL/D,EAAKwD,EACLO,IAAMP,GAGPvD,GAAKwD,EAAQM,GAAGpD,EAAG,GACnBT,GAAKwD,EAAQK,GAAGnD,EAAG,GAGnBN,EAAMK,EAAG,GAAOX,EAAGW,EAAG,GACtBJ,EAAMK,EAAG,GAAOZ,EAAGY,EAAG,GAGhB8B,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMT,GAAK,EAAGA,GAAKH,EAAIG,KAAO,CAC7B,IAAMV,GAAK,EAAGA,GAAKH,EAAIG,KACtBN,EAAMK,IAAOZ,EAAII,KAAMH,EAASK,EAAMK,IAAMiB,EAAM,CAAEwB,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIT,GAAIV,IAAMK,GAAOpB,EAAEO,KAC/FM,IAAMH,EACNI,IAAMH,EAEPE,IAAMK,EACNJ,IAAMK,CACN,CACDN,IAAMkB,EACNjB,IAAMkB,CACN,CACDnB,IAAMsB,EACNrB,IAAMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CASV,ECzOA,SAAuBpD,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACA5C,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAa,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACA9B,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAjF,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACAI,GACAI,GACAlC,GACAC,GACAiD,GACAC,GACA7D,GACAC,GACAC,GACAU,GACAS,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAiB,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACAzB,GA2BJ,IArBAxD,GADAwD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,GAAKsD,GAAEtD,GACPC,GAAKqD,GAAErD,GACPJ,EAAMS,EAASgD,GAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,GAAKzE,EAAEK,OACPqE,GAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,GAAG,GACTZ,EAAMa,GAAG,GAGH8E,GAAKjF,EAAG,GAAIiF,GAAK,GAUtB,IATKA,GAAKlC,GACTX,GAAK6C,GACLA,GAAK,IAEL7C,GAAKW,EACLkC,IAAMlC,GAEPgC,EAAM3B,GAAO6B,GAAG/E,GAAG,GACnB8E,EAAM3B,GAAO4B,GAAG9E,GAAG,GACb2E,GAAK9E,EAAG,GAAI8E,GAAK,GAYtB,IAXKA,GAAK/B,GACTf,GAAK8C,GACLA,GAAK,IAEL9C,GAAKe,EACL+B,IAAM/B,GAEPb,EAAMhC,GAAG,GAAO8B,GAAG9B,GAAG,GACtBiC,EAAMhC,GAAG,GAAO6B,GAAG7B,GAAG,GACtByE,EAAMG,EAAQD,GAAG5E,GAAG,GACpB2E,EAAMG,EAAQF,GAAG3E,GAAG,GACdwE,GAAK3E,EAAG,GAAI2E,GAAK,GAYtB,IAXKA,GAAK5B,GACTnB,EAAK+C,GACLA,GAAK,IAEL/C,EAAKmB,EACL4B,IAAM5B,GAEPjB,EAAM5B,GAAG,GAAO0B,EAAG1B,GAAG,GACtB6B,EAAM5B,GAAG,GAAOyB,EAAGzB,GAAG,GACtBsE,EAAMG,EAAQD,GAAGzE,GAAG,GACpBwE,EAAMG,EAAQF,GAAGxE,GAAG,GACdqE,GAAKxE,EAAG,GAAIwE,GAAK,GAYtB,IAXKA,GAAKzB,GACTvB,EAAKgD,GACLA,GAAK,IAELhD,EAAKuB,EACLyB,IAAMzB,GAEPrB,EAAMxB,GAAG,GAAOsB,EAAGtB,GAAG,GACtByB,EAAMxB,GAAG,GAAOqB,EAAGrB,GAAG,GACtBmE,EAAMG,EAAQD,GAAGtE,GAAG,GACpBqE,EAAMG,EAAQF,GAAGrE,GAAG,GACdkE,GAAKrE,EAAG,GAAIqE,GAAK,GAYtB,IAXKA,GAAKtB,GACT3B,EAAKiD,GACLA,GAAK,IAELjD,EAAK2B,EACLsB,IAAMtB,GAEPzB,EAAMpB,GAAG,GAAOkB,EAAGlB,GAAG,GACtBqB,EAAMpB,GAAG,GAAOiB,EAAGjB,GAAG,GACtBgE,EAAMG,EAAQD,GAAGnE,GAAG,GACpBkE,EAAMG,EAAQF,GAAGlE,GAAG,GACd+D,GAAKlE,EAAG,GAAIkE,GAAK,GAYtB,IAXKA,GAAKnB,GACT/B,EAAKkD,GACLA,GAAK,IAELlD,EAAK+B,EACLmB,IAAMnB,GAEP7B,EAAMhB,GAAG,GAAOc,EAAGd,GAAG,GACtBiB,EAAMhB,GAAG,GAAOa,EAAGb,GAAG,GACtB6D,EAAMG,EAAQD,GAAGhE,GAAG,GACpB+D,EAAMG,EAAQF,GAAG/D,GAAG,GACd4D,GAAK/D,EAAG,GAAI+D,GAAK,GAYtB,IAXKA,GAAKhB,GACTnC,EAAKmD,GACLA,GAAK,IAELnD,EAAKmC,EACLgB,IAAMhB,GAEPjC,EAAMZ,GAAG,GAAOU,EAAGV,GAAG,GACtBa,EAAMZ,GAAG,GAAOS,EAAGT,GAAG,GACtByD,EAAMI,EAAQD,GAAG7D,GAAG,GACpB2D,EAAMI,EAAQF,GAAG5D,GAAG,GACdoD,GAAKvD,EAAG,GAAIuD,GAAK,GAYtB,IAXKA,GAAKR,GACT9C,EAAKsD,GACLA,GAAK,IAELtD,EAAK8C,EACLQ,IAAMR,GAEPrC,EAAMR,GAAG,GAAOD,EAAGC,GAAG,GACtBS,EAAMR,GAAG,GAAOF,EAAGE,GAAG,GACtB6C,EAAMY,EAAQL,GAAGrD,GAAG,GACpB+C,EAAMY,EAAQN,GAAGpD,GAAG,GACdmD,GAAKtD,EAAG,GAAIsD,GAAK,GAiBtB,IAhBKA,GAAKP,GACTxD,EAAK+D,GACLA,GAAK,IAEL/D,EAAKwD,EACLO,IAAMP,GAGPvD,GAAKwD,EAAQM,GAAGpD,GAAG,GACnBT,GAAKwD,EAAQK,GAAGnD,GAAG,GAGnBN,EAAMK,GAAG,GAAOX,EAAGW,GAAG,GACtBJ,EAAMK,GAAG,GAAOZ,EAAGY,GAAG,GAGhBkC,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMT,GAAK,EAAGA,GAAKH,EAAIG,KAAO,CAC7B,IAAMV,GAAK,EAAGA,GAAKH,EAAIG,KACtBN,EAAMK,IAAOZ,EAAII,KAAMH,EAASK,EAAMK,IAAMiB,EAAM,CAAE4B,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIT,GAAIV,IAAMK,GAAOpB,EAAEO,KACnGM,IAAMH,EACNI,IAAMH,EAEPE,IAAMK,EACNJ,IAAMK,CACN,CACDN,IAAMkB,EACNjB,IAAMkB,CACN,CACDnB,IAAMsB,EACNrB,IAAMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CACDvC,IAAM0C,EACNzC,IAAM0C,CACN,CAUX,ECjQA,SAAwBxD,EAAGC,EAAGC,EAAKC,GAClC,IAAIiE,EACA5D,EACAC,EACAC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAhD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAS,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAjC,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACApF,EACAC,EACAT,EACAU,EACAW,EACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAtC,GACAC,GACAiD,GACAC,GACA7D,GACAC,GACAC,GACAU,GACAS,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAa,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACA5B,GA2BJ,IArBAxD,GADAwD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,GAAKsD,GAAEtD,GACPC,GAAKqD,GAAErD,GACPJ,EAAMS,EAASgD,GAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,GAAKzE,EAAEK,OACPqE,GAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,GAAG,GACTZ,EAAMa,GAAG,GAGHiF,GAAKpF,EAAG,GAAIoF,GAAK,GAUtB,IATKA,GAAKrC,GACTP,GAAK4C,GACLA,GAAK,IAEL5C,GAAKO,EACLqC,IAAMrC,GAEPmC,EAAM9B,GAAOgC,GAAGlF,GAAG,GACnBiF,EAAM9B,GAAO+B,GAAGjF,GAAG,GACb8E,GAAKjF,EAAG,GAAIiF,GAAK,GAYtB,IAXKA,GAAKlC,GACTX,GAAK6C,GACLA,GAAK,IAEL7C,GAAKW,EACLkC,IAAMlC,GAEPT,EAAMpC,GAAG,GAAOkC,GAAGlC,GAAG,GACtBqC,EAAMpC,GAAG,GAAOiC,GAAGjC,GAAG,GACtB4E,EAAMG,EAAQD,GAAG/E,GAAG,GACpB8E,EAAMG,EAAQF,GAAG9E,GAAG,GACd2E,GAAK9E,EAAG,GAAI8E,GAAK,GAYtB,IAXKA,GAAK/B,GACTf,GAAK8C,GACLA,GAAK,IAEL9C,GAAKe,EACL+B,IAAM/B,GAEPb,EAAMhC,GAAG,GAAO8B,GAAG9B,GAAG,GACtBiC,EAAMhC,GAAG,GAAO6B,GAAG7B,GAAG,GACtByE,EAAMG,EAAQD,GAAG5E,GAAG,GACpB2E,EAAMG,EAAQF,GAAG3E,GAAG,GACdwE,GAAK3E,EAAG,GAAI2E,GAAK,GAYtB,IAXKA,GAAK5B,GACTnB,GAAK+C,GACLA,GAAK,IAEL/C,GAAKmB,EACL4B,IAAM5B,GAEPjB,EAAM5B,GAAG,GAAO0B,GAAG1B,GAAG,GACtB6B,EAAM5B,GAAG,GAAOyB,GAAGzB,GAAG,GACtBsE,EAAMG,EAAQD,GAAGzE,GAAG,GACpBwE,EAAMG,EAAQF,GAAGxE,GAAG,GACdqE,GAAKxE,EAAG,GAAIwE,GAAK,GAYtB,IAXKA,GAAKzB,GACTvB,GAAKgD,GACLA,GAAK,IAELhD,GAAKuB,EACLyB,IAAMzB,GAEPrB,EAAMxB,GAAG,GAAOsB,GAAGtB,GAAG,GACtByB,EAAMxB,GAAG,GAAOqB,GAAGrB,GAAG,GACtBmE,EAAMG,EAAQD,GAAGtE,GAAG,GACpBqE,EAAMG,EAAQF,GAAGrE,GAAG,GACdkE,GAAKrE,EAAG,GAAIqE,GAAK,GAYtB,IAXKA,GAAKtB,GACT3B,GAAKiD,GACLA,GAAK,IAELjD,GAAK2B,EACLsB,IAAMtB,GAEPzB,EAAMpB,GAAG,GAAOkB,GAAGlB,GAAG,GACtBqB,EAAMpB,GAAG,GAAOiB,GAAGjB,GAAG,GACtBgE,EAAMG,EAAQD,GAAGnE,GAAG,GACpBkE,EAAMG,EAAQF,GAAGlE,GAAG,GACd+D,GAAKlE,EAAG,GAAIkE,GAAK,GAYtB,IAXKA,GAAKnB,GACT/B,GAAKkD,GACLA,GAAK,IAELlD,GAAK+B,EACLmB,IAAMnB,GAEP7B,EAAMhB,GAAG,GAAOc,GAAGd,GAAG,GACtBiB,EAAMhB,GAAG,GAAOa,GAAGb,GAAG,GACtB6D,EAAMG,EAAQD,GAAGhE,GAAG,GACpB+D,EAAMG,EAAQF,GAAG/D,GAAG,GACd4D,GAAK/D,EAAG,GAAI+D,GAAK,GAYtB,IAXKA,GAAKhB,GACTnC,EAAKmD,GACLA,GAAK,IAELnD,EAAKmC,EACLgB,IAAMhB,GAEPjC,EAAMZ,GAAG,GAAOU,EAAGV,GAAG,GACtBa,EAAMZ,GAAG,GAAOS,EAAGT,GAAG,GACtByD,EAAMI,EAAQD,GAAG7D,GAAG,GACpB2D,EAAMI,EAAQF,GAAG5D,GAAG,GACdoD,GAAKvD,EAAG,GAAIuD,GAAK,GAYtB,IAXKA,GAAKR,GACT9C,EAAKsD,GACLA,GAAK,IAELtD,EAAK8C,EACLQ,IAAMR,GAEPrC,EAAMR,GAAG,GAAOD,EAAGC,GAAG,GACtBS,EAAMR,GAAG,GAAOF,EAAGE,GAAG,GACtB6C,EAAMY,EAAQL,GAAGrD,GAAG,GACpB+C,EAAMY,EAAQN,GAAGpD,GAAG,GACdmD,GAAKtD,EAAG,GAAIsD,GAAK,GAiBtB,IAhBKA,GAAKP,GACTxD,EAAK+D,GACLA,GAAK,IAEL/D,EAAKwD,EACLO,IAAMP,GAGPvD,GAAKwD,EAAQM,GAAGpD,GAAG,GACnBT,GAAKwD,EAAQK,GAAGnD,GAAG,GAGnBN,EAAMK,GAAG,GAAOX,EAAGW,GAAG,GACtBJ,EAAMK,GAAG,GAAOZ,EAAGY,GAAG,GAGhBsC,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMT,GAAK,EAAGA,GAAKH,EAAIG,KAAO,CAC7B,IAAMV,GAAK,EAAGA,GAAKH,EAAIG,KACtBN,EAAMK,IAAOZ,EAAII,KAAMH,EAASK,EAAMK,IAAMiB,EAAM,CAAEgC,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIT,GAAIV,IAAMK,GAAOpB,EAAEO,KACvGM,IAAMH,EACNI,IAAMH,EAEPE,IAAMK,EACNJ,IAAMK,CACN,CACDN,IAAMkB,EACNjB,IAAMkB,CACN,CACDnB,IAAMsB,EACNrB,IAAMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CACDvC,IAAM0C,EACNzC,IAAM0C,CACN,CACD3C,IAAM8C,EACN7C,IAAM8C,CACN,CAWZ,G/BnRI8C,EAAuB,CgCW3B,SAAuB1G,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAC,EACAQ,EACAP,EACAQ,EACAkD,EACAC,EACAlD,EACA6C,EACAC,EACA7C,EACAkD,EACAC,EACAjD,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAC,EACAU,EACAkD,EACAC,EACAC,EA2BJ,IArBAxD,GADAwD,EAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,EAAEtD,GACPC,EAAKqD,EAAErD,GACPJ,EAAMS,EAASgD,EAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGHoD,EAAKvD,EAAG,GAAIuD,EAAK,GAUtB,IATKA,EAAKR,GACTI,EAAKI,EACLA,EAAK,IAELJ,EAAKJ,EACLQ,GAAMR,GAEPC,EAAMI,EAAOG,EAAGrD,EAAG,GACnB+C,EAAMI,EAAOE,EAAGpD,EAAG,GACbmD,EAAKtD,EAAG,GAAIsD,EAAK,GAqBtB,IApBKA,EAAKP,GACTG,EAAKI,EACLA,EAAK,IAELJ,EAAKH,EACLO,GAAMP,GAGPvD,EAAKwD,EAAOM,EAAGpD,EAAG,GAClBT,EAAKwD,EAAOK,EAAGnD,EAAG,GAGlBN,EAAMK,EAAG,GAAMgD,EAAGhD,EAAG,GACrBJ,EAAMK,EAAG,GAAM+C,EAAG/C,EAAG,GAGrByC,EAAMjE,EAAEgE,UAAU,GAClBE,EAAMjE,EAAE+D,UAAU,GAGZvC,EAAK,EAAGA,EAAK+C,EAAI/C,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKwD,EAAIxD,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEL,EAAIV,GAAMK,GAAOpB,EAAEO,MAC9EM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CAGJ,EC7FA,SAAuBnB,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAC,EACAQ,EACAa,EACApB,EACAQ,EACAa,EACAqC,EACAY,EACAX,EACAY,EACA9D,EACA6C,EACAC,EACA7C,EACAkD,EACAC,EACAW,EACA5D,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAC,EACAU,EACAS,EACAyC,EACAC,EACAQ,EACAP,EA+BJ,IAzBAxD,GADAwD,EAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,EAAEtD,GACPC,EAAKqD,EAAErD,GACPJ,EAAMS,EAASgD,EAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGTyC,EAAMjE,EAAEgE,UAAU,GAClBE,EAAMjE,EAAE+D,UAAU,GAGZoB,EAAK/D,EAAG,GAAI+D,EAAK,GAUtB,IATKA,EAAKhB,GACTe,EAAKC,EACLA,EAAK,IAELD,EAAKf,EACLgB,GAAMhB,GAEPa,EAAMR,EAAOW,EAAG7D,EAAG,GACnB2D,EAAMR,EAAOU,EAAG5D,EAAG,GACboD,EAAKvD,EAAG,GAAIuD,EAAK,GAYtB,IAXKA,EAAKR,GACTI,EAAKI,EACLA,EAAK,IAELJ,EAAKJ,EACLQ,GAAMR,GAEPrC,EAAMR,EAAG,GAAOiD,EAAGjD,EAAG,GACtBS,EAAMR,EAAG,GAAOgD,EAAGhD,EAAG,GACtB6C,EAAMY,EAAQL,EAAGrD,EAAG,GACpB+C,EAAMY,EAAQN,EAAGpD,EAAG,GACdmD,EAAKtD,EAAG,GAAIsD,EAAK,GAiBtB,IAhBKA,EAAKP,GACTG,EAAKI,EACLA,EAAK,IAELJ,EAAKH,EACLO,GAAMP,GAGPvD,EAAKwD,EAAQM,EAAGpD,EAAG,GACnBT,EAAKwD,EAAQK,EAAGnD,EAAG,GAGnBN,EAAMK,EAAG,GAAOgD,EAAGhD,EAAG,GACtBJ,EAAMK,EAAG,GAAO+C,EAAG/C,EAAG,GAGhBU,EAAK,EAAGA,EAAKiD,EAAIjD,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAK+C,EAAI/C,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKwD,EAAIxD,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEI,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,MAClFM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CAIL,ECvHA,SAAuBhC,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAxB,EACAQ,EACAa,EACAI,EACAiC,EACAY,EACAI,EACAjE,EACAkD,EACAY,EACAI,EACAjE,EACAT,EACAU,EACAW,EACAI,EACAd,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAC,EACAU,EACAS,EACAI,EACAqC,EACAC,EACAQ,EACAG,EACAV,EA2BJ,IArBAxD,GADAwD,EAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,EAAEtD,GACPC,EAAKqD,EAAErD,GACPJ,EAAMS,EAASgD,EAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGH+D,EAAKlE,EAAG,GAAIkE,EAAK,GAUtB,IATKA,EAAKnB,GACT/B,EAAKkD,EACLA,EAAK,IAELlD,EAAK+B,EACLmB,GAAMnB,GAEPiB,EAAMZ,EAAOc,EAAGhE,EAAG,GACnB+D,EAAMZ,EAAOa,EAAG/D,EAAG,GACb4D,EAAK/D,EAAG,GAAI+D,EAAK,GAYtB,IAXKA,EAAKhB,GACTnC,EAAKmD,EACLA,EAAK,IAELnD,EAAKmC,EACLgB,GAAMhB,GAEPjC,EAAMZ,EAAG,GAAOU,EAAGV,EAAG,GACtBa,EAAMZ,EAAG,GAAOS,EAAGT,EAAG,GACtByD,EAAMI,EAAQD,EAAG7D,EAAG,GACpB2D,EAAMI,EAAQF,EAAG5D,EAAG,GACdoD,EAAKvD,EAAG,GAAIuD,EAAK,GAYtB,IAXKA,EAAKR,GACT9C,EAAKsD,EACLA,EAAK,IAELtD,EAAK8C,EACLQ,GAAMR,GAEPrC,EAAMR,EAAG,GAAOD,EAAGC,EAAG,GACtBS,EAAMR,EAAG,GAAOF,EAAGE,EAAG,GACtB6C,EAAMY,EAAQL,EAAGrD,EAAG,GACpB+C,EAAMY,EAAQN,EAAGpD,EAAG,GACdmD,EAAKtD,EAAG,GAAIsD,EAAK,GAqBtB,IApBKA,EAAKP,GACTxD,EAAK+D,EACLA,EAAK,IAEL/D,EAAKwD,EACLO,GAAMP,GAGPvD,EAAKwD,EAAQM,EAAGpD,EAAG,GACnBT,EAAKwD,EAAQK,EAAGnD,EAAG,GAGnBN,EAAMK,EAAG,GAAOX,EAAGW,EAAG,GACtBJ,EAAMK,EAAG,GAAOZ,EAAGY,EAAG,GAGtByC,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGb1B,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEQ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,MACtFM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CAKN,EC/IA,SAAuBpC,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAI,EACA5B,EACAQ,EACAa,EACAI,EACAI,EACA6B,EACAY,EACAI,EACAG,EACApE,EACAkD,EACAY,EACAI,EACAG,EACApE,EACAT,EACAU,EACAW,EACAI,EACAI,EACAlB,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAiC,EACAC,EACAQ,EACAG,EACAG,EACAb,GA+BJ,IAzBAxD,GADAwD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,GAAEtD,GACPC,EAAKqD,GAAErD,GACPJ,EAAMS,EAASgD,GAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGTyC,EAAMjE,EAAEgE,UAAU,GAClBE,EAAMjE,EAAE+D,UAAU,GAGZ0B,EAAKrE,EAAG,GAAIqE,EAAK,GAUtB,IATKA,EAAKtB,GACT3B,EAAKiD,EACLA,EAAK,IAELjD,EAAK2B,EACLsB,GAAMtB,GAEPoB,EAAMf,EAAOiB,EAAGnE,EAAG,GACnBkE,EAAMf,EAAOgB,EAAGlE,EAAG,GACb+D,EAAKlE,EAAG,GAAIkE,EAAK,GAYtB,IAXKA,EAAKnB,GACT/B,EAAKkD,EACLA,EAAK,IAELlD,EAAK+B,EACLmB,GAAMnB,GAEP7B,EAAMhB,EAAG,GAAOc,EAAGd,EAAG,GACtBiB,EAAMhB,EAAG,GAAOa,EAAGb,EAAG,GACtB6D,EAAMG,EAAQD,EAAGhE,EAAG,GACpB+D,EAAMG,EAAQF,EAAG/D,EAAG,GACd4D,EAAK/D,EAAG,GAAI+D,EAAK,GAYtB,IAXKA,EAAKhB,GACTnC,EAAKmD,EACLA,EAAK,IAELnD,EAAKmC,EACLgB,GAAMhB,GAEPjC,EAAMZ,EAAG,GAAOU,EAAGV,EAAG,GACtBa,EAAMZ,EAAG,GAAOS,EAAGT,EAAG,GACtByD,EAAMI,EAAQD,EAAG7D,EAAG,GACpB2D,EAAMI,EAAQF,EAAG5D,EAAG,GACdoD,EAAKvD,EAAG,GAAIuD,EAAK,GAYtB,IAXKA,EAAKR,GACT9C,EAAKsD,EACLA,EAAK,IAELtD,EAAK8C,EACLQ,GAAMR,GAEPrC,EAAMR,EAAG,GAAOD,EAAGC,EAAG,GACtBS,EAAMR,EAAG,GAAOF,EAAGE,EAAG,GACtB6C,EAAMY,EAAQL,EAAGrD,EAAG,GACpB+C,EAAMY,EAAQN,EAAGpD,EAAG,GACdmD,EAAKtD,EAAG,GAAIsD,EAAK,GAiBtB,IAhBKA,EAAKP,GACTxD,EAAK+D,EACLA,EAAK,IAEL/D,EAAKwD,EACLO,GAAMP,GAGPvD,EAAKwD,EAAQM,EAAGpD,EAAG,GACnBT,EAAKwD,EAAQK,EAAGnD,EAAG,GAGnBN,EAAMK,EAAG,GAAOX,EAAGW,EAAG,GACtBJ,EAAMK,EAAG,GAAOZ,EAAGY,EAAG,GAGhBkB,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEY,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,MAC1FM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CAMP,ECvKA,SAAuBxC,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAyD,EACAD,EACAvD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAhC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAyB,EACAY,EACAI,EACAG,EACAG,EACArB,EACAY,EACAI,EACAG,EACAG,EACAxE,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAtB,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAC,EACAU,EACAS,EACAI,EACAI,EACAI,GACA6B,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAhB,GA+BJ,IAzBAxD,GADAwD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,GAAEtD,GACPC,EAAKqD,GAAErD,GACPJ,EAAMS,EAASgD,GAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGTyC,EAAMjE,EAAEgE,UAAU,GAClBE,EAAMjE,EAAE+D,UAAU,GAGZ6B,GAAKxE,EAAG,GAAIwE,GAAK,GAUtB,IATKA,GAAKzB,GACTvB,EAAKgD,GACLA,GAAK,IAELhD,EAAKuB,EACLyB,IAAMzB,GAEPuB,EAAMlB,EAAOoB,GAAGtE,EAAG,GACnBqE,EAAMlB,EAAOmB,GAAGrE,EAAG,GACbkE,GAAKrE,EAAG,GAAIqE,GAAK,GAYtB,IAXKA,GAAKtB,GACT3B,EAAKiD,GACLA,GAAK,IAELjD,EAAK2B,EACLsB,IAAMtB,GAEPzB,EAAMpB,EAAG,GAAOkB,EAAGlB,EAAG,GACtBqB,EAAMpB,EAAG,GAAOiB,EAAGjB,EAAG,GACtBgE,EAAMG,EAAQD,GAAGnE,EAAG,GACpBkE,EAAMG,EAAQF,GAAGlE,EAAG,GACd+D,GAAKlE,EAAG,GAAIkE,GAAK,GAYtB,IAXKA,GAAKnB,GACT/B,EAAKkD,GACLA,GAAK,IAELlD,EAAK+B,EACLmB,IAAMnB,GAEP7B,EAAMhB,EAAG,GAAOc,EAAGd,EAAG,GACtBiB,EAAMhB,EAAG,GAAOa,EAAGb,EAAG,GACtB6D,EAAMG,EAAQD,GAAGhE,EAAG,GACpB+D,EAAMG,EAAQF,GAAG/D,EAAG,GACd4D,GAAK/D,EAAG,GAAI+D,GAAK,GAYtB,IAXKA,GAAKhB,GACTnC,EAAKmD,GACLA,GAAK,IAELnD,EAAKmC,EACLgB,IAAMhB,GAEPjC,EAAMZ,EAAG,GAAOU,EAAGV,EAAG,GACtBa,EAAMZ,EAAG,GAAOS,EAAGT,EAAG,GACtByD,EAAMI,EAAQD,GAAG7D,EAAG,GACpB2D,EAAMI,EAAQF,GAAG5D,EAAG,GACdoD,GAAKvD,EAAG,GAAIuD,GAAK,GAYtB,IAXKA,GAAKR,GACT9C,EAAKsD,GACLA,GAAK,IAELtD,EAAK8C,EACLQ,IAAMR,GAEPrC,EAAMR,EAAG,GAAOD,EAAGC,EAAG,GACtBS,EAAMR,EAAG,GAAOF,EAAGE,EAAG,GACtB6C,EAAMY,EAAQL,GAAGrD,EAAG,GACpB+C,EAAMY,EAAQN,GAAGpD,EAAG,GACdmD,GAAKtD,EAAG,GAAIsD,GAAK,GAiBtB,IAhBKA,GAAKP,GACTxD,EAAK+D,GACLA,GAAK,IAEL/D,EAAKwD,EACLO,IAAMP,GAGPvD,EAAKwD,EAAQM,GAAGpD,EAAG,GACnBT,EAAKwD,EAAQK,GAAGnD,EAAG,GAGnBN,EAAMK,EAAG,GAAOX,EAAGW,EAAG,GACtBJ,EAAMK,EAAG,GAAOZ,EAAGY,EAAG,GAGhBsB,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMJ,EAAK,EAAGA,EAAKD,EAAIC,IAAO,CAC7B,IAAMT,EAAK,EAAGA,EAAKH,EAAIG,IAAO,CAC7B,IAAMV,EAAK,EAAGA,EAAKH,EAAIG,IACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEgB,GAAIJ,EAAIJ,EAAIJ,EAAIT,EAAIV,GAAMK,GAAOpB,EAAEO,MAC9FM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CAOR,EC/LA,SAAuB5C,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACApC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAqB,EACAY,EACAI,EACAG,EACAG,EACAG,EACAxB,EACAY,EACAI,EACAG,EACAG,EACAG,EACA3E,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACA1B,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAC,GACAU,GACAS,GACAI,GACAI,GACAI,GACAI,GACAyB,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAnB,GA+BJ,IAzBAxD,GADAwD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,GAAEtD,GACPC,EAAKqD,GAAErD,GACPJ,EAAMS,EAASgD,GAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,EAAG,GAGTyC,EAAMjE,EAAEgE,UAAU,GAClBE,EAAMjE,EAAE+D,UAAU,GAGZgC,GAAK3E,EAAG,GAAI2E,GAAK,GAUtB,IATKA,GAAK5B,GACTnB,EAAK+C,GACLA,GAAK,IAEL/C,EAAKmB,EACL4B,IAAM5B,GAEP0B,EAAMrB,EAAOuB,GAAGzE,EAAG,GACnBwE,EAAMrB,EAAOsB,GAAGxE,EAAG,GACbqE,GAAKxE,EAAG,GAAIwE,GAAK,GAYtB,IAXKA,GAAKzB,GACTvB,EAAKgD,GACLA,GAAK,IAELhD,EAAKuB,EACLyB,IAAMzB,GAEPrB,EAAMxB,EAAG,GAAOsB,EAAGtB,EAAG,GACtByB,EAAMxB,EAAG,GAAOqB,EAAGrB,EAAG,GACtBmE,EAAMG,EAAQD,GAAGtE,EAAG,GACpBqE,EAAMG,EAAQF,GAAGrE,EAAG,GACdkE,GAAKrE,EAAG,GAAIqE,GAAK,GAYtB,IAXKA,GAAKtB,GACT3B,EAAKiD,GACLA,GAAK,IAELjD,EAAK2B,EACLsB,IAAMtB,GAEPzB,EAAMpB,EAAG,GAAOkB,EAAGlB,EAAG,GACtBqB,EAAMpB,EAAG,GAAOiB,EAAGjB,EAAG,GACtBgE,EAAMG,EAAQD,GAAGnE,EAAG,GACpBkE,EAAMG,EAAQF,GAAGlE,EAAG,GACd+D,GAAKlE,EAAG,GAAIkE,GAAK,GAYtB,IAXKA,GAAKnB,GACT/B,EAAKkD,GACLA,GAAK,IAELlD,EAAK+B,EACLmB,IAAMnB,GAEP7B,EAAMhB,EAAG,GAAOc,EAAGd,EAAG,GACtBiB,EAAMhB,EAAG,GAAOa,EAAGb,EAAG,GACtB6D,EAAMG,EAAQD,GAAGhE,EAAG,GACpB+D,EAAMG,EAAQF,GAAG/D,EAAG,GACd4D,GAAK/D,EAAG,GAAI+D,GAAK,GAYtB,IAXKA,GAAKhB,GACTnC,EAAKmD,GACLA,GAAK,IAELnD,EAAKmC,EACLgB,IAAMhB,GAEPjC,EAAMZ,EAAG,GAAOU,EAAGV,EAAG,GACtBa,EAAMZ,EAAG,GAAOS,EAAGT,EAAG,GACtByD,EAAMI,EAAQD,GAAG7D,EAAG,GACpB2D,EAAMI,EAAQF,GAAG5D,EAAG,GACdoD,GAAKvD,EAAG,GAAIuD,GAAK,GAYtB,IAXKA,GAAKR,GACT9C,EAAKsD,GACLA,GAAK,IAELtD,EAAK8C,EACLQ,IAAMR,GAEPrC,EAAMR,EAAG,GAAOD,EAAGC,EAAG,GACtBS,EAAMR,EAAG,GAAOF,EAAGE,EAAG,GACtB6C,EAAMY,EAAQL,GAAGrD,EAAG,GACpB+C,EAAMY,EAAQN,GAAGpD,EAAG,GACdmD,GAAKtD,EAAG,GAAIsD,GAAK,GAiBtB,IAhBKA,GAAKP,GACTxD,EAAK+D,GACLA,GAAK,IAEL/D,EAAKwD,EACLO,IAAMP,GAGPvD,EAAKwD,EAAQM,GAAGpD,EAAG,GACnBT,EAAKwD,EAAQK,GAAGnD,EAAG,GAGnBN,EAAMK,EAAG,GAAOX,EAAGW,EAAG,GACtBJ,EAAMK,EAAG,GAAOZ,EAAGY,EAAG,GAGhB0B,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMT,GAAK,EAAGA,GAAKH,EAAIG,KAAO,CAC7B,IAAMV,GAAK,EAAGA,GAAKH,EAAIG,KACtBmD,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMiB,EAAM,CAAEoB,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIT,GAAIV,IAAMK,GAAOpB,EAAEO,MAClGM,GAAMH,EACNI,GAAMH,EAEPE,GAAMK,EACNJ,GAAMK,CACN,CACDN,GAAMkB,EACNjB,GAAMkB,CACN,CACDnB,GAAMsB,EACNrB,GAAMsB,CACN,CACDvB,GAAM0B,EACNzB,GAAM0B,CACN,CACD3B,GAAM8B,EACN7B,GAAM8B,CACN,CACD/B,GAAMkC,EACNjC,GAAMkC,CACN,CAQT,ECvNA,SAAuBhD,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAxC,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAiB,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACA3B,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACA9E,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,EACAI,EACAI,EACA9B,EACAC,GACAiD,GACAC,GACA7D,GACAC,GACAC,GACAU,GACAS,GACAI,GACAI,GACAI,GACAI,GACAI,GACAqB,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAG,GACAtB,GA+BJ,IAzBAxD,GADAwD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,EAAKsD,GAAEtD,GACPC,GAAKqD,GAAErD,GACPJ,EAAMS,EAASgD,GAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,GAAKzE,EAAEK,OACPqE,GAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,EAAG,GACTZ,EAAMa,GAAG,GAGTyC,EAAMjE,EAAEgE,UAAU,GAClBE,EAAMjE,EAAE+D,UAAU,GAGZmC,GAAK9E,EAAG,GAAI8E,GAAK,GAUtB,IATKA,GAAK/B,GACTf,EAAK8C,GACLA,GAAK,IAEL9C,EAAKe,EACL+B,IAAM/B,GAEP6B,EAAMxB,GAAO0B,GAAG5E,EAAG,GACnB2E,EAAMxB,GAAOyB,GAAG3E,GAAG,GACbwE,GAAK3E,EAAG,GAAI2E,GAAK,GAYtB,IAXKA,GAAK5B,GACTnB,EAAK+C,GACLA,GAAK,IAEL/C,EAAKmB,EACL4B,IAAM5B,GAEPjB,EAAM5B,EAAG,GAAO0B,EAAG1B,EAAG,GACtB6B,EAAM5B,GAAG,GAAOyB,EAAGzB,GAAG,GACtBsE,EAAMG,EAAQD,GAAGzE,EAAG,GACpBwE,EAAMG,EAAQF,GAAGxE,GAAG,GACdqE,GAAKxE,EAAG,GAAIwE,GAAK,GAYtB,IAXKA,GAAKzB,GACTvB,EAAKgD,GACLA,GAAK,IAELhD,EAAKuB,EACLyB,IAAMzB,GAEPrB,EAAMxB,EAAG,GAAOsB,EAAGtB,EAAG,GACtByB,EAAMxB,GAAG,GAAOqB,EAAGrB,GAAG,GACtBmE,EAAMG,EAAQD,GAAGtE,EAAG,GACpBqE,EAAMG,EAAQF,GAAGrE,GAAG,GACdkE,GAAKrE,EAAG,GAAIqE,GAAK,GAYtB,IAXKA,GAAKtB,GACT3B,EAAKiD,GACLA,GAAK,IAELjD,EAAK2B,EACLsB,IAAMtB,GAEPzB,EAAMpB,EAAG,GAAOkB,EAAGlB,EAAG,GACtBqB,EAAMpB,GAAG,GAAOiB,EAAGjB,GAAG,GACtBgE,EAAMG,EAAQD,GAAGnE,EAAG,GACpBkE,EAAMG,EAAQF,GAAGlE,GAAG,GACd+D,GAAKlE,EAAG,GAAIkE,GAAK,GAYtB,IAXKA,GAAKnB,GACT/B,EAAKkD,GACLA,GAAK,IAELlD,EAAK+B,EACLmB,IAAMnB,GAEP7B,EAAMhB,EAAG,GAAOc,EAAGd,EAAG,GACtBiB,EAAMhB,GAAG,GAAOa,EAAGb,GAAG,GACtB6D,EAAMG,EAAQD,GAAGhE,EAAG,GACpB+D,EAAMG,EAAQF,GAAG/D,GAAG,GACd4D,GAAK/D,EAAG,GAAI+D,GAAK,GAYtB,IAXKA,GAAKhB,GACTnC,EAAKmD,GACLA,GAAK,IAELnD,EAAKmC,EACLgB,IAAMhB,GAEPjC,EAAMZ,EAAG,GAAOU,EAAGV,EAAG,GACtBa,EAAMZ,GAAG,GAAOS,EAAGT,GAAG,GACtByD,EAAMI,EAAQD,GAAG7D,EAAG,GACpB2D,EAAMI,EAAQF,GAAG5D,GAAG,GACdoD,GAAKvD,EAAG,GAAIuD,GAAK,GAYtB,IAXKA,GAAKR,GACT9C,EAAKsD,GACLA,GAAK,IAELtD,EAAK8C,EACLQ,IAAMR,GAEPrC,EAAMR,EAAG,GAAOD,EAAGC,EAAG,GACtBS,EAAMR,GAAG,GAAOF,EAAGE,GAAG,GACtB6C,EAAMY,EAAQL,GAAGrD,EAAG,GACpB+C,EAAMY,EAAQN,GAAGpD,GAAG,GACdmD,GAAKtD,EAAG,GAAIsD,GAAK,GAiBtB,IAhBKA,GAAKP,GACTxD,EAAK+D,GACLA,GAAK,IAEL/D,EAAKwD,EACLO,IAAMP,GAGPvD,GAAKwD,EAAQM,GAAGpD,EAAG,GACnBT,GAAKwD,EAAQK,GAAGnD,GAAG,GAGnBN,EAAMK,EAAG,GAAOX,EAAGW,EAAG,GACtBJ,EAAMK,GAAG,GAAOZ,EAAGY,GAAG,GAGhB8B,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMT,GAAK,EAAGA,GAAKH,EAAIG,KAAO,CAC7B,IAAMV,GAAK,EAAGA,GAAKH,EAAIG,KACtBmD,EAAKzD,EAAMK,GAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,IAAMiB,EAAM,CAAEwB,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIT,GAAIV,IAAMK,GAAOpB,EAAEO,MACtGM,IAAMH,EACNI,IAAMH,EAEPE,IAAMK,EACNJ,IAAMK,CACN,CACDN,IAAMkB,EACNjB,IAAMkB,CACN,CACDnB,IAAMsB,EACNrB,IAAMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CASV,EC/OA,SAAuBpD,EAAGC,EAAGC,EAAKC,GACjC,IAAIiE,EACA5D,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACA5C,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAa,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACA9B,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAjF,EACAC,EACAT,EACAU,EACAW,EACAI,EACAI,EACAI,GACAI,GACAI,GACAI,GACAlC,GACAC,GACAiD,GACAC,GACA7D,GACAC,GACAC,GACAU,GACAS,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAiB,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACAzB,GA+BJ,IAzBAxD,GADAwD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,GAAKsD,GAAEtD,GACPC,GAAKqD,GAAErD,GACPJ,EAAMS,EAASgD,GAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,GAAKzE,EAAEK,OACPqE,GAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,GAAG,GACTZ,EAAMa,GAAG,GAGTyC,EAAMjE,EAAEgE,UAAU,GAClBE,EAAMjE,EAAE+D,UAAU,GAGZsC,GAAKjF,EAAG,GAAIiF,GAAK,GAUtB,IATKA,GAAKlC,GACTX,GAAK6C,GACLA,GAAK,IAEL7C,GAAKW,EACLkC,IAAMlC,GAEPgC,EAAM3B,GAAO6B,GAAG/E,GAAG,GACnB8E,EAAM3B,GAAO4B,GAAG9E,GAAG,GACb2E,GAAK9E,EAAG,GAAI8E,GAAK,GAYtB,IAXKA,GAAK/B,GACTf,GAAK8C,GACLA,GAAK,IAEL9C,GAAKe,EACL+B,IAAM/B,GAEPb,EAAMhC,GAAG,GAAO8B,GAAG9B,GAAG,GACtBiC,EAAMhC,GAAG,GAAO6B,GAAG7B,GAAG,GACtByE,EAAMG,EAAQD,GAAG5E,GAAG,GACpB2E,EAAMG,EAAQF,GAAG3E,GAAG,GACdwE,GAAK3E,EAAG,GAAI2E,GAAK,GAYtB,IAXKA,GAAK5B,GACTnB,GAAK+C,GACLA,GAAK,IAEL/C,GAAKmB,EACL4B,IAAM5B,GAEPjB,EAAM5B,GAAG,GAAO0B,GAAG1B,GAAG,GACtB6B,EAAM5B,GAAG,GAAOyB,GAAGzB,GAAG,GACtBsE,EAAMG,EAAQD,GAAGzE,GAAG,GACpBwE,EAAMG,EAAQF,GAAGxE,GAAG,GACdqE,GAAKxE,EAAG,GAAIwE,GAAK,GAYtB,IAXKA,GAAKzB,GACTvB,GAAKgD,GACLA,GAAK,IAELhD,GAAKuB,EACLyB,IAAMzB,GAEPrB,EAAMxB,GAAG,GAAOsB,GAAGtB,GAAG,GACtByB,EAAMxB,GAAG,GAAOqB,GAAGrB,GAAG,GACtBmE,EAAMG,EAAQD,GAAGtE,GAAG,GACpBqE,EAAMG,EAAQF,GAAGrE,GAAG,GACdkE,GAAKrE,EAAG,GAAIqE,GAAK,GAYtB,IAXKA,GAAKtB,GACT3B,EAAKiD,GACLA,GAAK,IAELjD,EAAK2B,EACLsB,IAAMtB,GAEPzB,EAAMpB,GAAG,GAAOkB,EAAGlB,GAAG,GACtBqB,EAAMpB,GAAG,GAAOiB,EAAGjB,GAAG,GACtBgE,EAAMG,EAAQD,GAAGnE,GAAG,GACpBkE,EAAMG,EAAQF,GAAGlE,GAAG,GACd+D,GAAKlE,EAAG,GAAIkE,GAAK,GAYtB,IAXKA,GAAKnB,GACT/B,EAAKkD,GACLA,GAAK,IAELlD,EAAK+B,EACLmB,IAAMnB,GAEP7B,EAAMhB,GAAG,GAAOc,EAAGd,GAAG,GACtBiB,EAAMhB,GAAG,GAAOa,EAAGb,GAAG,GACtB6D,EAAMG,EAAQD,GAAGhE,GAAG,GACpB+D,EAAMG,EAAQF,GAAG/D,GAAG,GACd4D,GAAK/D,EAAG,GAAI+D,GAAK,GAYtB,IAXKA,GAAKhB,GACTnC,EAAKmD,GACLA,GAAK,IAELnD,EAAKmC,EACLgB,IAAMhB,GAEPjC,EAAMZ,GAAG,GAAOU,EAAGV,GAAG,GACtBa,EAAMZ,GAAG,GAAOS,EAAGT,GAAG,GACtByD,EAAMI,EAAQD,GAAG7D,GAAG,GACpB2D,EAAMI,EAAQF,GAAG5D,GAAG,GACdoD,GAAKvD,EAAG,GAAIuD,GAAK,GAYtB,IAXKA,GAAKR,GACT9C,EAAKsD,GACLA,GAAK,IAELtD,EAAK8C,EACLQ,IAAMR,GAEPrC,EAAMR,GAAG,GAAOD,EAAGC,GAAG,GACtBS,EAAMR,GAAG,GAAOF,EAAGE,GAAG,GACtB6C,EAAMY,EAAQL,GAAGrD,GAAG,GACpB+C,EAAMY,EAAQN,GAAGpD,GAAG,GACdmD,GAAKtD,EAAG,GAAIsD,GAAK,GAiBtB,IAhBKA,GAAKP,GACTxD,EAAK+D,GACLA,GAAK,IAEL/D,EAAKwD,EACLO,IAAMP,GAGPvD,GAAKwD,EAAQM,GAAGpD,GAAG,GACnBT,GAAKwD,EAAQK,GAAGnD,GAAG,GAGnBN,EAAMK,GAAG,GAAOX,EAAGW,GAAG,GACtBJ,EAAMK,GAAG,GAAOZ,EAAGY,GAAG,GAGhBkC,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,EAAIC,KAAO,CAC7B,IAAMT,GAAK,EAAGA,GAAKH,EAAIG,KAAO,CAC7B,IAAMV,GAAK,EAAGA,GAAKH,EAAIG,KACtBmD,EAAKzD,EAAMK,GAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,IAAMiB,EAAM,CAAE4B,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIT,GAAIV,IAAMK,GAAOpB,EAAEO,MAC1GM,IAAMH,EACNI,IAAMH,EAEPE,IAAMK,EACNJ,IAAMK,CACN,CACDN,IAAMkB,EACNjB,IAAMkB,CACN,CACDnB,IAAMsB,EACNrB,IAAMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CACDvC,IAAM0C,EACNzC,IAAM0C,CACN,CAUX,ECvQA,SAAwBxD,EAAGC,EAAGC,EAAKC,GAClC,IAAIiE,EACA5D,EACAC,EACAwD,EACAC,EACAxD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAhD,EACAQ,EACAa,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAS,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAjC,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACApF,EACAC,EACAT,EACAU,GACAW,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAtC,GACAC,GACAiD,GACAC,GACA7D,GACAC,GACAC,GACAU,GACAS,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAa,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACA5B,GA+BJ,IAzBAxD,GADAwD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BI,GACPE,GAAKsD,GAAEtD,GACPC,GAAKqD,GAAErD,GACPJ,EAAMS,EAASgD,GAAEzD,KAGjBgD,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,GAAKzE,EAAEK,OACPqE,GAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMa,GAAG,GACTZ,EAAMa,GAAG,GAGTyC,EAAMjE,EAAEgE,UAAU,GAClBE,EAAMjE,EAAE+D,UAAU,GAGZyC,GAAKpF,EAAG,GAAIoF,GAAK,GAUtB,IATKA,GAAKrC,GACTP,GAAK4C,GACLA,GAAK,IAEL5C,GAAKO,EACLqC,IAAMrC,GAEPmC,EAAM9B,GAAOgC,GAAGlF,GAAG,GACnBiF,EAAM9B,GAAO+B,GAAGjF,GAAG,GACb8E,GAAKjF,EAAG,GAAIiF,GAAK,GAYtB,IAXKA,GAAKlC,GACTX,GAAK6C,GACLA,GAAK,IAEL7C,GAAKW,EACLkC,IAAMlC,GAEPT,EAAMpC,GAAG,GAAOkC,GAAGlC,GAAG,GACtBqC,EAAMpC,GAAG,GAAOiC,GAAGjC,GAAG,GACtB4E,EAAMG,EAAQD,GAAG/E,GAAG,GACpB8E,EAAMG,EAAQF,GAAG9E,GAAG,GACd2E,GAAK9E,EAAG,GAAI8E,GAAK,GAYtB,IAXKA,GAAK/B,GACTf,GAAK8C,GACLA,GAAK,IAEL9C,GAAKe,EACL+B,IAAM/B,GAEPb,EAAMhC,GAAG,GAAO8B,GAAG9B,GAAG,GACtBiC,EAAMhC,GAAG,GAAO6B,GAAG7B,GAAG,GACtByE,EAAMG,EAAQD,GAAG5E,GAAG,GACpB2E,EAAMG,EAAQF,GAAG3E,GAAG,GACdwE,GAAK3E,EAAG,GAAI2E,GAAK,GAYtB,IAXKA,GAAK5B,GACTnB,GAAK+C,GACLA,GAAK,IAEL/C,GAAKmB,EACL4B,IAAM5B,GAEPjB,EAAM5B,GAAG,GAAO0B,GAAG1B,GAAG,GACtB6B,EAAM5B,GAAG,GAAOyB,GAAGzB,GAAG,GACtBsE,EAAMG,EAAQD,GAAGzE,GAAG,GACpBwE,EAAMG,EAAQF,GAAGxE,GAAG,GACdqE,GAAKxE,EAAG,GAAIwE,GAAK,GAYtB,IAXKA,GAAKzB,GACTvB,GAAKgD,GACLA,GAAK,IAELhD,GAAKuB,EACLyB,IAAMzB,GAEPrB,EAAMxB,GAAG,GAAOsB,GAAGtB,GAAG,GACtByB,EAAMxB,GAAG,GAAOqB,GAAGrB,GAAG,GACtBmE,EAAMG,EAAQD,GAAGtE,GAAG,GACpBqE,EAAMG,EAAQF,GAAGrE,GAAG,GACdkE,GAAKrE,EAAG,GAAIqE,GAAK,GAYtB,IAXKA,GAAKtB,GACT3B,GAAKiD,GACLA,GAAK,IAELjD,GAAK2B,EACLsB,IAAMtB,GAEPzB,EAAMpB,GAAG,GAAOkB,GAAGlB,GAAG,GACtBqB,EAAMpB,GAAG,GAAOiB,GAAGjB,GAAG,GACtBgE,EAAMG,EAAQD,GAAGnE,GAAG,GACpBkE,EAAMG,EAAQF,GAAGlE,GAAG,GACd+D,GAAKlE,EAAG,GAAIkE,GAAK,GAYtB,IAXKA,GAAKnB,GACT/B,GAAKkD,GACLA,GAAK,IAELlD,GAAK+B,EACLmB,IAAMnB,GAEP7B,EAAMhB,GAAG,GAAOc,GAAGd,GAAG,GACtBiB,EAAMhB,GAAG,GAAOa,GAAGb,GAAG,GACtB6D,EAAMG,EAAQD,GAAGhE,GAAG,GACpB+D,EAAMG,EAAQF,GAAG/D,GAAG,GACd4D,GAAK/D,EAAG,GAAI+D,GAAK,GAYtB,IAXKA,GAAKhB,GACTnC,GAAKmD,GACLA,GAAK,IAELnD,GAAKmC,EACLgB,IAAMhB,GAEPjC,EAAMZ,GAAG,GAAOU,GAAGV,GAAG,GACtBa,EAAMZ,GAAG,GAAOS,GAAGT,GAAG,GACtByD,EAAMI,EAAQD,GAAG7D,GAAG,GACpB2D,EAAMI,EAAQF,GAAG5D,GAAG,GACdoD,GAAKvD,EAAG,GAAIuD,GAAK,GAYtB,IAXKA,GAAKR,GACT9C,GAAKsD,GACLA,GAAK,IAELtD,GAAK8C,EACLQ,IAAMR,GAEPrC,EAAMR,GAAG,GAAOD,GAAGC,GAAG,GACtBS,EAAMR,GAAG,GAAOF,GAAGE,GAAG,GACtB6C,EAAMY,EAAQL,GAAGrD,GAAG,GACpB+C,EAAMY,EAAQN,GAAGpD,GAAG,GACdmD,GAAKtD,EAAG,GAAIsD,GAAK,GAiBtB,IAhBKA,GAAKP,GACTxD,EAAK+D,GACLA,GAAK,IAEL/D,EAAKwD,EACLO,IAAMP,GAGPvD,GAAKwD,EAAQM,GAAGpD,GAAG,GACnBT,GAAKwD,EAAQK,GAAGnD,GAAG,GAGnBN,EAAMK,GAAG,GAAOX,EAAGW,GAAG,GACtBJ,EAAMK,GAAG,GAAOZ,EAAGY,GAAG,GAGhBsC,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMT,GAAK,EAAGA,GAAKH,GAAIG,KAAO,CAC7B,IAAMV,GAAK,EAAGA,GAAKH,EAAIG,KACtBmD,EAAKzD,EAAMK,GAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,IAAMiB,EAAM,CAAEgC,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIJ,GAAIT,GAAIV,IAAMK,GAAOpB,EAAEO,MAC9GM,IAAMH,EACNI,IAAMH,EAEPE,IAAMK,EACNJ,IAAMK,CACN,CACDN,IAAMkB,EACNjB,IAAMkB,CACN,CACDnB,IAAMsB,EACNrB,IAAMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CACDvC,IAAM0C,EACNzC,IAAM0C,CACN,CACD3C,IAAM8C,EACN7C,IAAM8C,CACN,CAWZ,GxCjSI+C,EAAW5G,EAAI4B,OAAQ,EAwE3B,SAASiF,EAAKC,EAAQ3G,EAAKC,GAC1B,IAAI2G,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA9F,EACAC,EACAiD,EACAC,EACA4C,EACAtH,EACAC,EACAsH,EACAC,EAUJ,GAPAxH,EAAIyH,EAAgBZ,EAAQ,IAC5B5G,EAAIwH,EAAgBZ,EAAQ,IAG5BI,EAAMjH,EAAEgB,MACRkG,EAAMjH,EAAEe,OACR8F,EAAQG,EAAItF,UACGuF,EAAIvF,OAClB,MAAM,IAAI+F,MAAO,oGAAoGZ,EAAM,iBAAiBI,EAAIvF,OAAO,KAGxJ,GAAe,IAAVmF,EACJ,OAAK9G,EAAE2H,kBAAoB1H,EAAE0H,iBACrB5D,EAAc+C,GAAS9G,EAAGC,EAAGC,EAAKC,GAEnCJ,EAAK+G,GAAS9G,EAAGC,EAAGC,EAAKC,GAKjC,IAFAkH,EAAM,EACNC,EAAK,EACCC,EAAI,EAAGA,EAAIT,EAAOS,IAAM,CAE7B,IADAC,EAAIP,EAAKM,MACEL,EAAKK,GACf,MAAM,IAAIG,MAAO,sDAGlBL,GAAOG,EAGI,IAANA,IACJF,GAAM,EAEP,CAED,GAAa,IAARD,EAAL,CAIA,GAAe,IAAVP,EACJ,OAAK9G,EAAE2H,kBAAoB1H,EAAE0H,iBACrB5D,EAAc+C,GAAS9G,EAAGC,EAAGC,EAAKC,GAEnCJ,EAAK+G,GAAS9G,EAAGC,EAAGC,EAAKC,GAOjC,GAJAoB,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QAGFqG,IAAOR,EAAM,EAAI,CAErB,IAAMS,EAAI,EAAGA,EAAIT,GACE,IAAbG,EAAKM,GADaA,KASxB,OAJAvH,EAAEgB,MAAQ,CAAEiG,EAAIM,IAChBtH,EAAEe,MAAQhB,EAAEgB,MACZhB,EAAEiB,QAAU,CAAEM,EAAGgG,IACjBtH,EAAEgB,QAAU,CAAEO,EAAG+F,IACZvH,EAAE2H,kBAAoB1H,EAAE0H,iBACrB5D,EAAc,GAAK/D,EAAGC,EAAGC,EAAKC,GAE/BJ,EAAK,GAAKC,EAAGC,EAAGC,EAAKC,EAC5B,CAMD,GAJAgH,EAAMS,EAAgBrG,GACtB6F,EAAMQ,EAAgBpG,GAGT,IAAR2F,GAAqB,IAARC,GAAaD,IAAQC,EAAM,CAM5C,GAJAL,EAAOc,EAAuBZ,EAAK1F,EAAIvB,EAAEK,QACzC2G,EAAOa,EAAuBX,EAAK1F,EAAIvB,EAAEI,QAGpCgH,IAAUN,EAAK,GAAGA,EAAK,GAAG,GAAOM,IAAUL,EAAK,GAAGA,EAAK,GAAG,EAkB/D,OAfCvC,EADY,IAAR0C,EACCJ,EAAM,GAENA,EAAM,GAGXrC,EADY,IAAR0C,EACCJ,EAAM,GAENA,EAAM,GAEZhH,EAAEgB,MAAQ,CAAEqG,GACZpH,EAAEe,MAAQhB,EAAEgB,MACZhB,EAAEiB,QAAU,CAAEkG,GACdlH,EAAEgB,QAAU,CAAEmG,GACdpH,EAAEK,OAASoE,EACXxE,EAAEI,OAASqE,EACN1E,EAAE2H,kBAAoB1H,EAAE0H,iBACrB5D,EAAc,GAAK/D,EAAGC,EAAGC,EAAKC,GAE/BJ,EAAK,GAAKC,EAAGC,EAAGC,EAAKC,GAK7B,GAAK2G,GAASH,EAEb,OAAK3G,EAAE2H,kBAAoB1H,EAAE0H,iBACrB5D,EAAc+C,GAAS9G,EAAGC,EAAGC,EAAKC,GAEnCJ,EAAK+G,GAAS9G,EAAGC,EAAGC,EAAKC,EAGjC,CAID,OAAK2G,GAASH,EACR3G,EAAE2H,kBAAoB1H,EAAE0H,iBACrBjB,EAAsBI,EAAM,GAAK9G,EAAGC,EAAGC,EAAKC,GAE7CgE,EAAa2C,EAAM,GAAK9G,EAAGC,EAAGC,EAAKC,GAGtCH,EAAE2H,kBAAoB1H,EAAE0H,iBFjN9B,SAAgB3H,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAqH,EACAC,EACAV,EACApD,EACAC,EACA9C,EACAC,EACAE,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAyG,EA4BJ,IA1BAlG,EAAKrB,EAAEgB,MAGPqG,EAAMW,EAAO3G,GAGbb,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTmB,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QAGPwD,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPyH,EAAO9H,EAAE4B,MACTmG,EAAO9H,EAAE2B,MAGTqC,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGbuD,EAAI,EAAGA,EAAIF,EAAKE,IACrB1G,EAAKoH,EAAW5G,EAAIE,EAAIkD,EAAIqD,EAAMP,EAAGzH,GACrCgB,EAAKmH,EAAW5G,EAAIG,EAAIkD,EAAIqD,EAAMR,EAAGzH,GACrCsB,EAAM8G,EAAS7G,EAAIE,EAAI,EAAGuG,EAAMP,EAAGzH,GACnCoE,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMO,EAAKpB,EAAEO,KAE5D,CEgKS4H,CAAenI,EAAGC,EAAGC,EAAKC,QDrOnC,SAAgBH,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAqH,EACAC,EACAV,EACAjG,EACAC,EACAE,EACAC,EACAiD,EACAC,EACA7D,EACAC,EACAyG,EAwBJ,IAtBAlG,EAAKrB,EAAEgB,MAGPqG,EAAMW,EAAO3G,GAGbb,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTmB,EAAKvB,EAAEiB,QACPO,EAAKvB,EAAEgB,QAGPwD,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPyH,EAAO9H,EAAE4B,MACTmG,EAAO9H,EAAE2B,MAGH2F,EAAI,EAAGA,EAAIF,EAAKE,IACrB1G,EAAKoH,EAAW5G,EAAIE,EAAIkD,EAAIqD,EAAMP,EAAGzH,GACrCgB,EAAKmH,EAAW5G,EAAIG,EAAIkD,EAAIqD,EAAMR,EAAGzH,GACrCsB,EAAM8G,EAAS7G,EAAIE,EAAI,EAAGuG,EAAMP,EAAGzH,GACnCW,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMO,EAAKpB,EAAEO,IAErD,CC2LC6H,CAAOpI,EAAGC,EAAGC,EAAKC,EAxFjB,CAyFF"} \ No newline at end of file diff --git a/lib/0d.js b/lib/0d.js deleted file mode 100644 index f19e08f..0000000 --- a/lib/0d.js +++ /dev/null @@ -1,100 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ){ -* return z * 10.0; -* } -* -* // Create a data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0 ] ); -* var ybuf = new Float64Array( 1 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offset: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like object: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* } -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0 ] -*/ -function map0d( x, y, fcn, thisArg ) { - y.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref ); -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/0d_accessors.js b/lib/0d_accessors.js deleted file mode 100644 index 0ce37b7..0000000 --- a/lib/0d_accessors.js +++ /dev/null @@ -1,121 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var ybuf = new Complex64Array( 2 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 30.0 -* -* var im = imagf( v ); -* // returns 40.0 -*/ -function map0d( x, y, fcn, thisArg ) { - y.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/10d.js b/lib/10d.js deleted file mode 100644 index f81fea5..0000000 --- a/lib/10d.js +++ /dev/null @@ -1,280 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_accessors.js b/lib/10d_accessors.js deleted file mode 100644 index b80eca7..0000000 --- a/lib/10d_accessors.js +++ /dev/null @@ -1,305 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_blocked.js b/lib/10d_blocked.js deleted file mode 100644 index 05863d6..0000000 --- a/lib/10d_blocked.js +++ /dev/null @@ -1,389 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/10d_blocked_accessors.js b/lib/10d_blocked_accessors.js deleted file mode 100644 index af78894..0000000 --- a/lib/10d_blocked_accessors.js +++ /dev/null @@ -1,414 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/1d.js b/lib/1d.js deleted file mode 100644 index b5f0220..0000000 --- a/lib/1d.js +++ /dev/null @@ -1,129 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 2 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 40.0, 60.0, 80.0 ] -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/1d_accessors.js b/lib/1d_accessors.js deleted file mode 100644 index b98015f..0000000 --- a/lib/1d_accessors.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 1 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/2d.js b/lib/2d.js deleted file mode 100644 index ac7b2fe..0000000 --- a/lib/2d.js +++ /dev/null @@ -1,166 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_accessors.js b/lib/2d_accessors.js deleted file mode 100644 index 07fb9c6..0000000 --- a/lib/2d_accessors.js +++ /dev/null @@ -1,191 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_blocked.js b/lib/2d_blocked.js deleted file mode 100644 index 9803bb4..0000000 --- a/lib/2d_blocked.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/2d_blocked_accessors.js b/lib/2d_blocked_accessors.js deleted file mode 100644 index 08e5eb7..0000000 --- a/lib/2d_blocked_accessors.js +++ /dev/null @@ -1,220 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/3d.js b/lib/3d.js deleted file mode 100644 index dd42769..0000000 --- a/lib/3d.js +++ /dev/null @@ -1,180 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_accessors.js b/lib/3d_accessors.js deleted file mode 100644 index 0a2042c..0000000 --- a/lib/3d_accessors.js +++ /dev/null @@ -1,205 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 2, 1 ]; -* var sy = [ 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var get; - var set; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_blocked.js b/lib/3d_blocked.js deleted file mode 100644 index d15d04c..0000000 --- a/lib/3d_blocked.js +++ /dev/null @@ -1,221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/3d_blocked_accessors.js b/lib/3d_blocked_accessors.js deleted file mode 100644 index 551417b..0000000 --- a/lib/3d_blocked_accessors.js +++ /dev/null @@ -1,246 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 2, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/4d.js b/lib/4d.js deleted file mode 100644 index 0556d8e..0000000 --- a/lib/4d.js +++ /dev/null @@ -1,194 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_accessors.js b/lib/4d_accessors.js deleted file mode 100644 index 1067a7e..0000000 --- a/lib/4d_accessors.js +++ /dev/null @@ -1,219 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_blocked.js b/lib/4d_blocked.js deleted file mode 100644 index 2b62030..0000000 --- a/lib/4d_blocked.js +++ /dev/null @@ -1,245 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/4d_blocked_accessors.js b/lib/4d_blocked_accessors.js deleted file mode 100644 index fe56f55..0000000 --- a/lib/4d_blocked_accessors.js +++ /dev/null @@ -1,270 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/5d.js b/lib/5d.js deleted file mode 100644 index fb138a5..0000000 --- a/lib/5d.js +++ /dev/null @@ -1,208 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_accessors.js b/lib/5d_accessors.js deleted file mode 100644 index 495e033..0000000 --- a/lib/5d_accessors.js +++ /dev/null @@ -1,233 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_blocked.js b/lib/5d_blocked.js deleted file mode 100644 index 7162107..0000000 --- a/lib/5d_blocked.js +++ /dev/null @@ -1,269 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/5d_blocked_accessors.js b/lib/5d_blocked_accessors.js deleted file mode 100644 index 4a0a880..0000000 --- a/lib/5d_blocked_accessors.js +++ /dev/null @@ -1,294 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/6d.js b/lib/6d.js deleted file mode 100644 index 0389a6e..0000000 --- a/lib/6d.js +++ /dev/null @@ -1,224 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map6d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_accessors.js b/lib/6d_accessors.js deleted file mode 100644 index 0287a54..0000000 --- a/lib/6d_accessors.js +++ /dev/null @@ -1,249 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_blocked.js b/lib/6d_blocked.js deleted file mode 100644 index e850edb..0000000 --- a/lib/6d_blocked.js +++ /dev/null @@ -1,293 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/6d_blocked_accessors.js b/lib/6d_blocked_accessors.js deleted file mode 100644 index 1acf143..0000000 --- a/lib/6d_blocked_accessors.js +++ /dev/null @@ -1,318 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var set; - var get; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/7d.js b/lib/7d.js deleted file mode 100644 index f2c6603..0000000 --- a/lib/7d.js +++ /dev/null @@ -1,238 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_accessors.js b/lib/7d_accessors.js deleted file mode 100644 index e50b3bf..0000000 --- a/lib/7d_accessors.js +++ /dev/null @@ -1,263 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_blocked.js b/lib/7d_blocked.js deleted file mode 100644 index 1b6ce95..0000000 --- a/lib/7d_blocked.js +++ /dev/null @@ -1,317 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/7d_blocked_accessors.js b/lib/7d_blocked_accessors.js deleted file mode 100644 index 52537bc..0000000 --- a/lib/7d_blocked_accessors.js +++ /dev/null @@ -1,342 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/8d.js b/lib/8d.js deleted file mode 100644 index 641c2f9..0000000 --- a/lib/8d.js +++ /dev/null @@ -1,252 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_accessors.js b/lib/8d_accessors.js deleted file mode 100644 index 08c4970..0000000 --- a/lib/8d_accessors.js +++ /dev/null @@ -1,277 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_blocked.js b/lib/8d_blocked.js deleted file mode 100644 index a52ab49..0000000 --- a/lib/8d_blocked.js +++ /dev/null @@ -1,341 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/8d_blocked_accessors.js b/lib/8d_blocked_accessors.js deleted file mode 100644 index e40b718..0000000 --- a/lib/8d_blocked_accessors.js +++ /dev/null @@ -1,366 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/9d.js b/lib/9d.js deleted file mode 100644 index ff40cad..0000000 --- a/lib/9d.js +++ /dev/null @@ -1,266 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_accessors.js b/lib/9d_accessors.js deleted file mode 100644 index ce30b37..0000000 --- a/lib/9d_accessors.js +++ /dev/null @@ -1,291 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_blocked.js b/lib/9d_blocked.js deleted file mode 100644 index 4440ee8..0000000 --- a/lib/9d_blocked.js +++ /dev/null @@ -1,365 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/9d_blocked_accessors.js b/lib/9d_blocked_accessors.js deleted file mode 100644 index 5998505..0000000 --- a/lib/9d_blocked_accessors.js +++ /dev/null @@ -1,390 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 80cf80e..0000000 --- a/lib/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray. -* -* @module @stdlib/ndarray-base-map -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var map = require( '@stdlib/ndarray-base-map' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 551b589..0000000 --- a/lib/main.js +++ /dev/null @@ -1,342 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var iterationOrder = require( '@stdlib/ndarray-base-iteration-order' ); -var minmaxViewBufferIndex = require( '@stdlib/ndarray-base-minmax-view-buffer-index' ); -var ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' ); -var blockedaccessormap2d = require( './2d_blocked_accessors.js' ); -var blockedaccessormap3d = require( './3d_blocked_accessors.js' ); -var blockedaccessormap4d = require( './4d_blocked_accessors.js' ); -var blockedaccessormap5d = require( './5d_blocked_accessors.js' ); -var blockedaccessormap6d = require( './6d_blocked_accessors.js' ); -var blockedaccessormap7d = require( './7d_blocked_accessors.js' ); -var blockedaccessormap8d = require( './8d_blocked_accessors.js' ); -var blockedaccessormap9d = require( './9d_blocked_accessors.js' ); -var blockedaccessormap10d = require( './10d_blocked_accessors.js' ); -var blockedmap2d = require( './2d_blocked.js' ); -var blockedmap3d = require( './3d_blocked.js' ); -var blockedmap4d = require( './4d_blocked.js' ); -var blockedmap5d = require( './5d_blocked.js' ); -var blockedmap6d = require( './6d_blocked.js' ); -var blockedmap7d = require( './7d_blocked.js' ); -var blockedmap8d = require( './8d_blocked.js' ); -var blockedmap9d = require( './9d_blocked.js' ); -var blockedmap10d = require( './10d_blocked.js' ); -var accessormap0d = require( './0d_accessors.js' ); -var accessormap1d = require( './1d_accessors.js' ); -var accessormap2d = require( './2d_accessors.js' ); -var accessormap3d = require( './3d_accessors.js' ); -var accessormap4d = require( './4d_accessors.js' ); -var accessormap5d = require( './5d_accessors.js' ); -var accessormap6d = require( './6d_accessors.js' ); -var accessormap7d = require( './7d_accessors.js' ); -var accessormap8d = require( './8d_accessors.js' ); -var accessormap9d = require( './9d_accessors.js' ); -var accessormap10d = require( './10d_accessors.js' ); -var accessormapnd = require( './nd_accessors.js' ); -var map0d = require( './0d.js' ); -var map1d = require( './1d.js' ); -var map2d = require( './2d.js' ); -var map3d = require( './3d.js' ); -var map4d = require( './4d.js' ); -var map5d = require( './5d.js' ); -var map6d = require( './6d.js' ); -var map7d = require( './7d.js' ); -var map8d = require( './8d.js' ); -var map9d = require( './9d.js' ); -var map10d = require( './10d.js' ); -var mapnd = require( './nd.js' ); - - -// VARIABLES // - -var MAP = [ - map0d, - map1d, - map2d, - map3d, - map4d, - map5d, - map6d, - map7d, - map8d, - map9d, - map10d -]; -var ACCESSOR_MAP = [ - accessormap0d, - accessormap1d, - accessormap2d, - accessormap3d, - accessormap4d, - accessormap5d, - accessormap6d, - accessormap7d, - accessormap8d, - accessormap9d, - accessormap10d -]; -var BLOCKED_MAP = [ - blockedmap2d, // 0 - blockedmap3d, - blockedmap4d, - blockedmap5d, - blockedmap6d, - blockedmap7d, - blockedmap8d, - blockedmap9d, - blockedmap10d // 8 -]; -var BLOCKED_ACCESSOR_MAP = [ - blockedaccessormap2d, // 0 - blockedaccessormap3d, - blockedaccessormap4d, - blockedaccessormap5d, - blockedaccessormap6d, - blockedaccessormap7d, - blockedaccessormap8d, - blockedaccessormap9d, - blockedaccessormap10d // 8 -]; -var MAX_DIMS = MAP.length -1; - - -// MAIN // - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* ## Notes -* -* - Each provided ndarray should be an `object` with the following properties: -* -* - **dtype**: data type. -* - **data**: data buffer. -* - **shape**: dimensions. -* - **strides**: stride lengths. -* - **offset**: index offset. -* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style). -* -* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array -* @param {Callback} fcn - callback function -* @param {*} [thisArg] - callback execution context -* @throws {Error} arrays must have the same number of dimensions -* @throws {Error} arrays must have the same shape -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map( arrays, fcn, thisArg ) { - var ndims; - var xmmv; - var ymmv; - var shx; - var shy; - var iox; - var ioy; - var len; - var sx; - var sy; - var ox; - var oy; - var ns; - var x; - var y; - var i; - var d; - - // Unpack the ndarrays and standardize ndarray meta data: - x = ndarray2object( arrays[ 0 ] ); - y = ndarray2object( arrays[ 1 ] ); - - // Verify that the input and output arrays have the same number of dimensions... - shx = x.shape; - shy = y.shape; - ndims = shx.length; - if ( ndims !== shy.length ) { - throw new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' ); - } - // Determine whether we can avoid iteration altogether... - if ( ndims === 0 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Verify that the input and output arrays have the same dimensions... - len = 1; // number of elements - ns = 0; // number of singleton dimensions - for ( i = 0; i < ndims; i++ ) { - d = shx[ i ]; - if ( d !== shy[ i ] ) { - throw new Error( 'invalid arguments. Array must have the same shape.' ); - } - // Note that, if one of the dimensions is `0`, the length will be `0`... - len *= d; - - // Check whether the current dimension is a singleton dimension... - if ( d === 1 ) { - ns += 1; - } - } - // Check whether we were provided empty ndarrays... - if ( len === 0 ) { - return; - } - // Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays... - if ( ndims === 1 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - - sx = x.strides; - sy = y.strides; - - // Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays... - if ( ns === ndims-1 ) { - // Get the index of the non-singleton dimension... - for ( i = 0; i < ndims; i++ ) { - if ( shx[ i ] !== 1 ) { - break; - } - } - x.shape = [ shx[i] ]; - y.shape = x.shape; - x.strides = [ sx[i] ]; - y.strides = [ sy[i] ]; - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg ); - } - return MAP[ 1 ]( x, y, fcn, thisArg ); - } - - iox = iterationOrder( sx ); // +/-1 - ioy = iterationOrder( sy ); // +/-1 - - // Determine whether we can avoid blocked iteration... - if ( iox !== 0 && ioy !== 0 && iox === ioy ) { - // Determine the minimum and maximum linear indices which are accessible by the array views: - xmmv = minmaxViewBufferIndex( shx, sx, x.offset ); - ymmv = minmaxViewBufferIndex( shy, sy, y.offset ); - - // Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays... - if ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) { - // Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values... - if ( iox === 1 ) { - ox = xmmv[ 0 ]; - } else { - ox = xmmv[ 1 ]; - } - if ( ioy === 1 ) { - oy = ymmv[ 0 ]; - } else { - oy = ymmv[ 1 ]; - } - x.shape = [ len ]; - y.shape = x.shape; - x.strides = [ iox ]; - y.strides = [ ioy ]; - x.offset = ox; - y.offset = oy; - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg ); - } - return MAP[ 1 ]( x, y, fcn, thisArg ); - } - // At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality... - - // Determine whether we can use simple nested loops... - if ( ndims <= MAX_DIMS ) { - // So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration... - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Fall-through to blocked iteration... - } - // At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration... - - // Determine whether we can perform blocked iteration... - if ( ndims <= MAX_DIMS ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - return BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - // Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)... - if ( x.accessorProtocol || y.accessorProtocol ) { - return accessormapnd( x, y, fcn, thisArg ); - } - mapnd( x, y, fcn, thisArg ); -} - - -// EXPORTS // - -module.exports = map; diff --git a/lib/nd.js b/lib/nd.js deleted file mode 100644 index 379d56e..0000000 --- a/lib/nd.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/lib/nd_accessors.js b/lib/nd_accessors.js deleted file mode 100644 index a28998b..0000000 --- a/lib/nd_accessors.js +++ /dev/null @@ -1,179 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var get; - var set; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/package.json b/package.json index 9f1d33f..c1b688b 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Apply a callback to elements in an input ndarray and assign results to elements in an output ndarray.", "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,58 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-reverse": "^0.2.2", - "@stdlib/array-base-take-indexed": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/ndarray-base-ind2sub": "^0.2.2", - "@stdlib/ndarray-base-iteration-order": "^0.2.2", - "@stdlib/ndarray-base-minmax-view-buffer-index": "^0.2.2", - "@stdlib/ndarray-base-ndarraylike2object": "^0.2.2", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", - "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.3.2", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-filled": "^0.2.1", - "@stdlib/array-filled-by": "^0.2.1", - "@stdlib/array-typed-complex-ctors": "^0.2.2", - "@stdlib/math-base-assert-is-nan": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/math-base-special-cbrt": "^0.2.2", - "@stdlib/math-base-special-floor": "^0.2.3", - "@stdlib/math-base-special-identity": "^0.2.2", - "@stdlib/math-base-special-pow": "^0.3.0", - "@stdlib/math-base-special-round": "^0.3.0", - "@stdlib/math-base-special-sqrt": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-to-array": "^0.2.1", - "@stdlib/random-base-discrete-uniform": "^0.2.1", - "@stdlib/random-base-randu": "^0.2.1", - "@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", "base", @@ -101,9 +26,8 @@ "transform", "for-each" ], - "__stdlib__": {}, "funding": { "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..86641ad --- /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.js b/test/test.js deleted file mode 100644 index bf08d19..0000000 --- a/test/test.js +++ /dev/null @@ -1,35 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -// FIXME: add tests From 2657916b80cbd349517fd4da52ed7b914deb3c0a Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 8 Sep 2024 08:17:43 +0000 Subject: [PATCH 06/32] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 80e447a..e6048e5 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,8 @@ "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.1" + "@stdlib/types": "^0.4.1", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-complex128": "^0.3.0", @@ -117,4 +118,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From e6d3739a3d60690269fe9eee40f49fb5526446bc Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 8 Sep 2024 08:18:08 +0000 Subject: [PATCH 07/32] Remove files --- index.d.ts | 117 -- index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 4964 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 9dd6ef1..0000000 --- a/index.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { ArrayLike } from '@stdlib/types/array'; -import { typedndarray } from '@stdlib/types/ndarray'; - -/** -* Callback invoked for each ndarray element. -* -* @returns output value -*/ -type Nullary = ( this: V ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @returns output value -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @returns output value -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Ternary = ( this: V, value: T, indices: Array, arr: typedndarray ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Callback = Nullary | Unary | Binary | Ternary; - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* @param arrays - array-like object containing one input ndarray and one output ndarray -* @param fcn - callback function -* @param thisArg - callback function execution context -* @throws arrays must have the same number of dimensions -* @throws arrays must have the same shape -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var ndarray = require( '@stdlib/ndarray-ctor' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarrays: -* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' ); -* var y = ndarray( 'float64', ybuf, shape, sy, oy, 'row-major' ); -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -declare function map( arrays: ArrayLike>, fcn: Callback, thisArg?: ThisParameterType> ): void; - - -// EXPORTS // - -export = map; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 65c1516..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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-minmax-view-buffer-index@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@v0.2.1-esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import m from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import v from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@v0.2.2-esm/index.mjs";var y="throw";var j="throw";var u=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(yr0;)for(vr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(yr0;)for(vr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport minmaxViewBufferIndex from '@stdlib/ndarray-base-minmax-view-buffer-index';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar xmmv;\n\tvar ymmv;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ns;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tns = 0; // number of singleton dimensions\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\n\t\t// Check whether the current dimension is a singleton dimension...\n\t\tif ( d === 1 ) {\n\t\t\tns += 1;\n\t\t}\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays...\n\tif ( ns === ndims-1 ) {\n\t\t// Get the index of the non-singleton dimension...\n\t\tfor ( i = 0; i < ndims; i++ ) {\n\t\t\tif ( shx[ i ] !== 1 ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tx.shape = [ shx[i] ];\n\t\ty.shape = x.shape;\n\t\tx.strides = [ sx[i] ];\n\t\ty.strides = [ sy[i] ];\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t}\n\n\tiox = iterationOrder( sx ); // +/-1\n\tioy = iterationOrder( sy ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine the minimum and maximum linear indices which are accessible by the array views:\n\t\txmmv = minmaxViewBufferIndex( shx, sx, x.offset );\n\t\tymmv = minmaxViewBufferIndex( shy, sy, y.offset );\n\n\t\t// Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays...\n\t\tif ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) {\n\t\t\t// Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values...\n\t\t\tif ( iox === 1 ) {\n\t\t\t\tox = xmmv[ 0 ];\n\t\t\t} else {\n\t\t\t\tox = xmmv[ 1 ];\n\t\t\t}\n\t\t\tif ( ioy === 1 ) {\n\t\t\t\toy = ymmv[ 0 ];\n\t\t\t} else {\n\t\t\t\toy = ymmv[ 1 ];\n\t\t\t}\n\t\t\tx.shape = [ len ];\n\t\t\ty.shape = x.shape;\n\t\t\tx.strides = [ iox ];\n\t\t\ty.strides = [ ioy ];\n\t\t\tx.offset = ox;\n\t\t\ty.offset = oy;\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality...\n\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration...\n\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","xmmv","ymmv","shx","shy","iox","ioy","len","ns","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","minmaxViewBufferIndex","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 86641ad..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From bf45a6e3a48a971ca9a14d3f94ee201b7233cd8e Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sun, 8 Sep 2024 08:19:42 +0000 Subject: [PATCH 08/32] 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 | 51 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 51 +- SECURITY.md | 5 - .../benchmark.10d_blocked_columnmajor.js | 148 - benchmark/benchmark.10d_blocked_rowmajor.js | 148 - benchmark/benchmark.10d_columnmajor.js | 148 - benchmark/benchmark.10d_rowmajor.js | 148 - benchmark/benchmark.11d_columnmajor.js | 148 - benchmark/benchmark.11d_rowmajor.js | 148 - benchmark/benchmark.1d_columnmajor.js | 137 - benchmark/benchmark.1d_rowmajor.js | 137 - benchmark/benchmark.2d_blocked_columnmajor.js | 149 - benchmark/benchmark.2d_blocked_rowmajor.js | 149 - benchmark/benchmark.2d_columnmajor.js | 149 - benchmark/benchmark.2d_rowmajor.js | 150 - benchmark/benchmark.2d_rowmajor_accessors.js | 177 - ...benchmark.2d_rowmajor_accessors_complex.js | 184 - benchmark/benchmark.3d_blocked_columnmajor.js | 149 - benchmark/benchmark.3d_blocked_rowmajor.js | 149 - benchmark/benchmark.3d_columnmajor.js | 149 - benchmark/benchmark.3d_rowmajor.js | 149 - benchmark/benchmark.4d_blocked_columnmajor.js | 148 - benchmark/benchmark.4d_blocked_rowmajor.js | 148 - benchmark/benchmark.4d_columnmajor.js | 148 - benchmark/benchmark.4d_rowmajor.js | 148 - benchmark/benchmark.5d_blocked_columnmajor.js | 148 - benchmark/benchmark.5d_blocked_rowmajor.js | 148 - benchmark/benchmark.5d_columnmajor.js | 148 - benchmark/benchmark.5d_rowmajor.js | 148 - benchmark/benchmark.6d_blocked_columnmajor.js | 148 - benchmark/benchmark.6d_blocked_rowmajor.js | 148 - benchmark/benchmark.6d_columnmajor.js | 148 - benchmark/benchmark.6d_rowmajor.js | 148 - benchmark/benchmark.7d_blocked_columnmajor.js | 148 - benchmark/benchmark.7d_blocked_rowmajor.js | 148 - benchmark/benchmark.7d_columnmajor.js | 148 - benchmark/benchmark.7d_rowmajor.js | 148 - benchmark/benchmark.8d_blocked_columnmajor.js | 148 - benchmark/benchmark.8d_blocked_rowmajor.js | 148 - benchmark/benchmark.8d_columnmajor.js | 148 - benchmark/benchmark.8d_rowmajor.js | 148 - benchmark/benchmark.9d_blocked_columnmajor.js | 148 - benchmark/benchmark.9d_blocked_rowmajor.js | 148 - benchmark/benchmark.9d_columnmajor.js | 148 - benchmark/benchmark.9d_rowmajor.js | 148 - branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 19 - dist/index.js.map | 7 - docs/repl.txt | 78 - docs/types/test.ts | 128 - examples/index.js | 50 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/0d.js | 100 - lib/0d_accessors.js | 121 - lib/10d.js | 280 - lib/10d_accessors.js | 305 -- lib/10d_blocked.js | 389 -- lib/10d_blocked_accessors.js | 414 -- lib/1d.js | 129 - lib/1d_accessors.js | 154 - lib/2d.js | 166 - lib/2d_accessors.js | 191 - lib/2d_blocked.js | 195 - lib/2d_blocked_accessors.js | 220 - lib/3d.js | 180 - lib/3d_accessors.js | 205 - lib/3d_blocked.js | 221 - lib/3d_blocked_accessors.js | 246 - lib/4d.js | 194 - lib/4d_accessors.js | 219 - lib/4d_blocked.js | 245 - lib/4d_blocked_accessors.js | 270 - lib/5d.js | 208 - lib/5d_accessors.js | 233 - lib/5d_blocked.js | 269 - lib/5d_blocked_accessors.js | 294 - lib/6d.js | 224 - lib/6d_accessors.js | 249 - lib/6d_blocked.js | 293 - lib/6d_blocked_accessors.js | 318 -- lib/7d.js | 238 - lib/7d_accessors.js | 263 - lib/7d_blocked.js | 317 -- lib/7d_blocked_accessors.js | 342 -- lib/8d.js | 252 - lib/8d_accessors.js | 277 - lib/8d_blocked.js | 341 -- lib/8d_blocked_accessors.js | 366 -- lib/9d.js | 266 - lib/9d_accessors.js | 291 - lib/9d_blocked.js | 365 -- lib/9d_blocked_accessors.js | 390 -- lib/index.js | 81 - lib/main.js | 342 -- lib/nd.js | 154 - lib/nd_accessors.js | 179 - package.json | 94 +- stats.html | 4842 +++++++++++++++++ test/dist/test.js | 33 - test/test.0d.js | 89 - test/test.10d.js | 2667 --------- test/test.1d.js | 134 - test/test.2d.js | 1195 ---- test/test.3d.js | 1331 ----- test/test.4d.js | 1503 ----- test/test.5d.js | 1740 ------ test/test.6d.js | 1892 ------- test/test.7d.js | 2099 ------- test/test.8d.js | 2221 -------- test/test.9d.js | 2447 --------- test/test.js | 139 - test/test.nd.js | 822 --- 137 files changed, 4872 insertions(+), 39270 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.10d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.10d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.10d_columnmajor.js delete mode 100644 benchmark/benchmark.10d_rowmajor.js delete mode 100644 benchmark/benchmark.11d_columnmajor.js delete mode 100644 benchmark/benchmark.11d_rowmajor.js delete mode 100644 benchmark/benchmark.1d_columnmajor.js delete mode 100644 benchmark/benchmark.1d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.2d_columnmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors_complex.js delete mode 100644 benchmark/benchmark.3d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.3d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.3d_columnmajor.js delete mode 100644 benchmark/benchmark.3d_rowmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.4d_columnmajor.js delete mode 100644 benchmark/benchmark.4d_rowmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.5d_columnmajor.js delete mode 100644 benchmark/benchmark.5d_rowmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.6d_columnmajor.js delete mode 100644 benchmark/benchmark.6d_rowmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.7d_columnmajor.js delete mode 100644 benchmark/benchmark.7d_rowmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.8d_columnmajor.js delete mode 100644 benchmark/benchmark.8d_rowmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.9d_columnmajor.js delete mode 100644 benchmark/benchmark.9d_rowmajor.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 (97%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/0d.js delete mode 100644 lib/0d_accessors.js delete mode 100644 lib/10d.js delete mode 100644 lib/10d_accessors.js delete mode 100644 lib/10d_blocked.js delete mode 100644 lib/10d_blocked_accessors.js delete mode 100644 lib/1d.js delete mode 100644 lib/1d_accessors.js delete mode 100644 lib/2d.js delete mode 100644 lib/2d_accessors.js delete mode 100644 lib/2d_blocked.js delete mode 100644 lib/2d_blocked_accessors.js delete mode 100644 lib/3d.js delete mode 100644 lib/3d_accessors.js delete mode 100644 lib/3d_blocked.js delete mode 100644 lib/3d_blocked_accessors.js delete mode 100644 lib/4d.js delete mode 100644 lib/4d_accessors.js delete mode 100644 lib/4d_blocked.js delete mode 100644 lib/4d_blocked_accessors.js delete mode 100644 lib/5d.js delete mode 100644 lib/5d_accessors.js delete mode 100644 lib/5d_blocked.js delete mode 100644 lib/5d_blocked_accessors.js delete mode 100644 lib/6d.js delete mode 100644 lib/6d_accessors.js delete mode 100644 lib/6d_blocked.js delete mode 100644 lib/6d_blocked_accessors.js delete mode 100644 lib/7d.js delete mode 100644 lib/7d_accessors.js delete mode 100644 lib/7d_blocked.js delete mode 100644 lib/7d_blocked_accessors.js delete mode 100644 lib/8d.js delete mode 100644 lib/8d_accessors.js delete mode 100644 lib/8d_blocked.js delete mode 100644 lib/8d_blocked_accessors.js delete mode 100644 lib/9d.js delete mode 100644 lib/9d_accessors.js delete mode 100644 lib/9d_blocked.js delete mode 100644 lib/9d_blocked_accessors.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js delete mode 100644 lib/nd.js delete mode 100644 lib/nd_accessors.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.0d.js delete mode 100644 test/test.10d.js delete mode 100644 test/test.1d.js delete mode 100644 test/test.2d.js delete mode 100644 test/test.3d.js delete mode 100644 test/test.4d.js delete mode 100644 test/test.5d.js delete mode 100644 test/test.6d.js delete mode 100644 test/test.7d.js delete mode 100644 test/test.8d.js delete mode 100644 test/test.9d.js delete mode 100644 test/test.js delete mode 100644 test/test.nd.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 00c9c4d..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/ndarray/base/map) 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 0696b91..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/ndarray/base/map) 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 1c89592..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: '29 17 * * 1' - - # 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 + + ```
@@ -214,7 +205,7 @@ console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); ## 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.10d_blocked_columnmajor.js b/benchmark/benchmark.10d_blocked_columnmajor.js deleted file mode 100644 index 05f9922..0000000 --- a/benchmark/benchmark.10d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_blocked_rowmajor.js b/benchmark/benchmark.10d_blocked_rowmajor.js deleted file mode 100644 index 19d212d..0000000 --- a/benchmark/benchmark.10d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_columnmajor.js b/benchmark/benchmark.10d_columnmajor.js deleted file mode 100644 index e74d522..0000000 --- a/benchmark/benchmark.10d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_rowmajor.js b/benchmark/benchmark.10d_rowmajor.js deleted file mode 100644 index e40298d..0000000 --- a/benchmark/benchmark.10d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_columnmajor.js b/benchmark/benchmark.11d_columnmajor.js deleted file mode 100644 index 4e0ed2b..0000000 --- a/benchmark/benchmark.11d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_rowmajor.js b/benchmark/benchmark.11d_rowmajor.js deleted file mode 100644 index febbfb1..0000000 --- a/benchmark/benchmark.11d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_columnmajor.js b/benchmark/benchmark.1d_columnmajor.js deleted file mode 100644 index 90b6a68..0000000 --- a/benchmark/benchmark.1d_columnmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_rowmajor.js b/benchmark/benchmark.1d_rowmajor.js deleted file mode 100644 index 4b8aef0..0000000 --- a/benchmark/benchmark.1d_rowmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_columnmajor.js b/benchmark/benchmark.2d_blocked_columnmajor.js deleted file mode 100644 index 7756089..0000000 --- a/benchmark/benchmark.2d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_rowmajor.js b/benchmark/benchmark.2d_blocked_rowmajor.js deleted file mode 100644 index 211ca54..0000000 --- a/benchmark/benchmark.2d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_columnmajor.js b/benchmark/benchmark.2d_columnmajor.js deleted file mode 100644 index 619a510..0000000 --- a/benchmark/benchmark.2d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor.js b/benchmark/benchmark.2d_rowmajor.js deleted file mode 100644 index 6144d5f..0000000 --- a/benchmark/benchmark.2d_rowmajor.js +++ /dev/null @@ -1,150 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors.js b/benchmark/benchmark.2d_rowmajor_accessors.js deleted file mode 100644 index 7ec19ae..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors.js +++ /dev/null @@ -1,177 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf[ idx ]; -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf[ idx ] = value; -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors_complex.js b/benchmark/benchmark.2d_rowmajor_accessors_complex.js deleted file mode 100644 index 83ca6f9..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors_complex.js +++ /dev/null @@ -1,184 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var ctors = require( '@stdlib/array-typed-complex-ctors' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'complex64' ]; -var order = 'row-major'; -var abtype = { - 'complex64': 'float32', - 'complex128': 'float64' -}; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf.get( idx ); -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf.set( value, idx ); -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var xbuf; - var ybuf; - var x; - var y; - - xbuf = filledarrayBy( len*2, abtype[ xtype ], discreteUniform( -100, 100 ) ); // eslint-disable-line max-len - ybuf = filledarray( 0.0, len*2, abtype[ ytype ] ); - x = { - 'dtype': xtype, - 'data': new ( ctors( xtype ) )( xbuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': new ( ctors( ytype ) )( ybuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 5; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_columnmajor.js b/benchmark/benchmark.3d_blocked_columnmajor.js deleted file mode 100644 index a1415e4..0000000 --- a/benchmark/benchmark.3d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_rowmajor.js b/benchmark/benchmark.3d_blocked_rowmajor.js deleted file mode 100644 index 827061e..0000000 --- a/benchmark/benchmark.3d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_columnmajor.js b/benchmark/benchmark.3d_columnmajor.js deleted file mode 100644 index f318ef9..0000000 --- a/benchmark/benchmark.3d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_rowmajor.js b/benchmark/benchmark.3d_rowmajor.js deleted file mode 100644 index e4c81c8..0000000 --- a/benchmark/benchmark.3d_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_columnmajor.js b/benchmark/benchmark.4d_blocked_columnmajor.js deleted file mode 100644 index c581273..0000000 --- a/benchmark/benchmark.4d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_rowmajor.js b/benchmark/benchmark.4d_blocked_rowmajor.js deleted file mode 100644 index 1af5db2..0000000 --- a/benchmark/benchmark.4d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_columnmajor.js b/benchmark/benchmark.4d_columnmajor.js deleted file mode 100644 index c12b8f0..0000000 --- a/benchmark/benchmark.4d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_rowmajor.js b/benchmark/benchmark.4d_rowmajor.js deleted file mode 100644 index 6f5497f..0000000 --- a/benchmark/benchmark.4d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_columnmajor.js b/benchmark/benchmark.5d_blocked_columnmajor.js deleted file mode 100644 index 5dfce4d..0000000 --- a/benchmark/benchmark.5d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_rowmajor.js b/benchmark/benchmark.5d_blocked_rowmajor.js deleted file mode 100644 index 72441a9..0000000 --- a/benchmark/benchmark.5d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_columnmajor.js b/benchmark/benchmark.5d_columnmajor.js deleted file mode 100644 index e24d575..0000000 --- a/benchmark/benchmark.5d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_rowmajor.js b/benchmark/benchmark.5d_rowmajor.js deleted file mode 100644 index e4fa039..0000000 --- a/benchmark/benchmark.5d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_columnmajor.js b/benchmark/benchmark.6d_blocked_columnmajor.js deleted file mode 100644 index bba975a..0000000 --- a/benchmark/benchmark.6d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_rowmajor.js b/benchmark/benchmark.6d_blocked_rowmajor.js deleted file mode 100644 index 5a3e6c8..0000000 --- a/benchmark/benchmark.6d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_columnmajor.js b/benchmark/benchmark.6d_columnmajor.js deleted file mode 100644 index bb10e51..0000000 --- a/benchmark/benchmark.6d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_rowmajor.js b/benchmark/benchmark.6d_rowmajor.js deleted file mode 100644 index 8018750..0000000 --- a/benchmark/benchmark.6d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_columnmajor.js b/benchmark/benchmark.7d_blocked_columnmajor.js deleted file mode 100644 index f850be3..0000000 --- a/benchmark/benchmark.7d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_rowmajor.js b/benchmark/benchmark.7d_blocked_rowmajor.js deleted file mode 100644 index 3f0687d..0000000 --- a/benchmark/benchmark.7d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_columnmajor.js b/benchmark/benchmark.7d_columnmajor.js deleted file mode 100644 index 5c40d66..0000000 --- a/benchmark/benchmark.7d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_rowmajor.js b/benchmark/benchmark.7d_rowmajor.js deleted file mode 100644 index 8b1903e..0000000 --- a/benchmark/benchmark.7d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_columnmajor.js b/benchmark/benchmark.8d_blocked_columnmajor.js deleted file mode 100644 index 6a55307..0000000 --- a/benchmark/benchmark.8d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_rowmajor.js b/benchmark/benchmark.8d_blocked_rowmajor.js deleted file mode 100644 index 2beb175..0000000 --- a/benchmark/benchmark.8d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_columnmajor.js b/benchmark/benchmark.8d_columnmajor.js deleted file mode 100644 index 92e3036..0000000 --- a/benchmark/benchmark.8d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_rowmajor.js b/benchmark/benchmark.8d_rowmajor.js deleted file mode 100644 index 02fd596..0000000 --- a/benchmark/benchmark.8d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_columnmajor.js b/benchmark/benchmark.9d_blocked_columnmajor.js deleted file mode 100644 index 8b5919f..0000000 --- a/benchmark/benchmark.9d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_rowmajor.js b/benchmark/benchmark.9d_blocked_rowmajor.js deleted file mode 100644 index b44f12a..0000000 --- a/benchmark/benchmark.9d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_columnmajor.js b/benchmark/benchmark.9d_columnmajor.js deleted file mode 100644 index 7f608ec..0000000 --- a/benchmark/benchmark.9d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_rowmajor.js b/benchmark/benchmark.9d_rowmajor.js deleted file mode 100644 index 90cb754..0000000 --- a/benchmark/benchmark.9d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/branches.md b/branches.md deleted file mode 100644 index 458a893..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/ndarray/base/map" -%% click B href "https://github.com/stdlib-js/ndarray-base-map/tree/main" -%% click C href "https://github.com/stdlib-js/ndarray-base-map/tree/production" -%% click D href "https://github.com/stdlib-js/ndarray-base-map/tree/esm" -%% click E href "https://github.com/stdlib-js/ndarray-base-map/tree/deno" -%% click F href "https://github.com/stdlib-js/ndarray-base-map/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/map -[production-url]: https://github.com/stdlib-js/ndarray-base-map/tree/production -[deno-url]: https://github.com/stdlib-js/ndarray-base-map/tree/deno -[deno-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/ndarray-base-map/tree/umd -[umd-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/ndarray-base-map/tree/esm -[esm-readme]: https://github.com/stdlib-js/ndarray-base-map/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 4504e2e..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import map from '../docs/types/index'; -export = map; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index fd1d096..0000000 --- a/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict";var ur=function(a,v){return function(){return v||a((v={exports:{}}).exports,v),v.exports}};var Lr=ur(function(g0,Kr){"use strict";var hv=require("@stdlib/ndarray-base-unary-loop-interchange-order"),mv=require("@stdlib/ndarray-base-unary-tiling-block-size"),kv=require("@stdlib/array-base-take-indexed"),zv=require("@stdlib/array-base-reverse");function gv(a,v,U,Q){var r,V,K,L,I,B,E,M,T,D,C,O,S,s,h,c,k,q,g,i,j,f,u,o,x,e;for(e=hv(a.shape,a.strides,v.strides),S=e.sh,c=e.sx,k=e.sy,D=zv(e.idx),r=mv(a.dtype,v.dtype),q=a.offset,g=v.offset,V=a.data,K=v.data,L=c[0],B=k[0],x=S[1];x>0;)for(x0;)for(o0;)for(y0;)for(p0;)for(l0;)for(R0;)for(_0;)for(n0;)for(w0;)for(N0;)for(F0;)for(H0;)for(W0;)for(J0;)for(ir0;)for(ar0;)for(A0;)for(Z0;)for(Y0;)for(or0;)for(tr0;)for(fr0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(Sr0;)for(pr0;)for(yr0;)for(tr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(Mr0;)for(Er0;)for(Tr0;)for(Pr0;)for(Or0;)for(wr0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(u0;)for(f0;)for(l0;)for(d0;)for(m0;)for(n0;)for(w0;)for(t0;)for(z0;)for(H0;)for(W0;)for(J0;)for(G0;)for(X0;)for(A0;)for(Z0;)for(Y0;)for(or0;)for($0;)for(N0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(ir0;)for(ar0;)for(lr0;)for(cr0;)for(Sr0;)for(pr0;)for(yr0;)for(tr0;)for(fr0;)for(dr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(Tr0;)for(Pr0;)for(Or0;)for(wr0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder = require( '@stdlib/ndarray-base-iteration-order' );\nvar minmaxViewBufferIndex = require( '@stdlib/ndarray-base-minmax-view-buffer-index' );\nvar ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' );\nvar blockedaccessormap2d = require( './2d_blocked_accessors.js' );\nvar blockedaccessormap3d = require( './3d_blocked_accessors.js' );\nvar blockedaccessormap4d = require( './4d_blocked_accessors.js' );\nvar blockedaccessormap5d = require( './5d_blocked_accessors.js' );\nvar blockedaccessormap6d = require( './6d_blocked_accessors.js' );\nvar blockedaccessormap7d = require( './7d_blocked_accessors.js' );\nvar blockedaccessormap8d = require( './8d_blocked_accessors.js' );\nvar blockedaccessormap9d = require( './9d_blocked_accessors.js' );\nvar blockedaccessormap10d = require( './10d_blocked_accessors.js' );\nvar blockedmap2d = require( './2d_blocked.js' );\nvar blockedmap3d = require( './3d_blocked.js' );\nvar blockedmap4d = require( './4d_blocked.js' );\nvar blockedmap5d = require( './5d_blocked.js' );\nvar blockedmap6d = require( './6d_blocked.js' );\nvar blockedmap7d = require( './7d_blocked.js' );\nvar blockedmap8d = require( './8d_blocked.js' );\nvar blockedmap9d = require( './9d_blocked.js' );\nvar blockedmap10d = require( './10d_blocked.js' );\nvar accessormap0d = require( './0d_accessors.js' );\nvar accessormap1d = require( './1d_accessors.js' );\nvar accessormap2d = require( './2d_accessors.js' );\nvar accessormap3d = require( './3d_accessors.js' );\nvar accessormap4d = require( './4d_accessors.js' );\nvar accessormap5d = require( './5d_accessors.js' );\nvar accessormap6d = require( './6d_accessors.js' );\nvar accessormap7d = require( './7d_accessors.js' );\nvar accessormap8d = require( './8d_accessors.js' );\nvar accessormap9d = require( './9d_accessors.js' );\nvar accessormap10d = require( './10d_accessors.js' );\nvar accessormapnd = require( './nd_accessors.js' );\nvar map0d = require( './0d.js' );\nvar map1d = require( './1d.js' );\nvar map2d = require( './2d.js' );\nvar map3d = require( './3d.js' );\nvar map4d = require( './4d.js' );\nvar map5d = require( './5d.js' );\nvar map6d = require( './6d.js' );\nvar map7d = require( './7d.js' );\nvar map8d = require( './8d.js' );\nvar map9d = require( './9d.js' );\nvar map10d = require( './10d.js' );\nvar mapnd = require( './nd.js' );\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar xmmv;\n\tvar ymmv;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ns;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tns = 0; // number of singleton dimensions\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\n\t\t// Check whether the current dimension is a singleton dimension...\n\t\tif ( d === 1 ) {\n\t\t\tns += 1;\n\t\t}\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays...\n\tif ( ns === ndims-1 ) {\n\t\t// Get the index of the non-singleton dimension...\n\t\tfor ( i = 0; i < ndims; i++ ) {\n\t\t\tif ( shx[ i ] !== 1 ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tx.shape = [ shx[i] ];\n\t\ty.shape = x.shape;\n\t\tx.strides = [ sx[i] ];\n\t\ty.strides = [ sy[i] ];\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t}\n\n\tiox = iterationOrder( sx ); // +/-1\n\tioy = iterationOrder( sy ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine the minimum and maximum linear indices which are accessible by the array views:\n\t\txmmv = minmaxViewBufferIndex( shx, sx, x.offset );\n\t\tymmv = minmaxViewBufferIndex( shy, sy, y.offset );\n\n\t\t// Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays...\n\t\tif ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) {\n\t\t\t// Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values...\n\t\t\tif ( iox === 1 ) {\n\t\t\t\tox = xmmv[ 0 ];\n\t\t\t} else {\n\t\t\t\tox = xmmv[ 1 ];\n\t\t\t}\n\t\t\tif ( ioy === 1 ) {\n\t\t\t\toy = ymmv[ 0 ];\n\t\t\t} else {\n\t\t\t\toy = ymmv[ 1 ];\n\t\t\t}\n\t\t\tx.shape = [ len ];\n\t\t\ty.shape = x.shape;\n\t\t\tx.strides = [ iox ];\n\t\t\ty.strides = [ ioy ];\n\t\t\tx.offset = ox;\n\t\t\ty.offset = oy;\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality...\n\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration...\n\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray.\n*\n* @module @stdlib/ndarray-base-map\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var map = require( '@stdlib/ndarray-base-map' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\n\n// MODULES //\n\nvar main = require( './main.js' );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "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", - "names": ["require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "get", "set", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "get", "set", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "set", "get", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_accessors", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d_accessors", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "get", "set", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd_accessors", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "get", "set", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_d", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_main", "__commonJSMin", "exports", "module", "iterationOrder", "minmaxViewBufferIndex", "ndarray2object", "blockedaccessormap2d", "blockedaccessormap3d", "blockedaccessormap4d", "blockedaccessormap5d", "blockedaccessormap6d", "blockedaccessormap7d", "blockedaccessormap8d", "blockedaccessormap9d", "blockedaccessormap10d", "blockedmap2d", "blockedmap3d", "blockedmap4d", "blockedmap5d", "blockedmap6d", "blockedmap7d", "blockedmap8d", "blockedmap9d", "blockedmap10d", "accessormap0d", "accessormap1d", "accessormap2d", "accessormap3d", "accessormap4d", "accessormap5d", "accessormap6d", "accessormap7d", "accessormap8d", "accessormap9d", "accessormap10d", "accessormapnd", "map0d", "map1d", "map2d", "map3d", "map4d", "map5d", "map6d", "map7d", "map8d", "map9d", "map10d", "mapnd", "MAP", "ACCESSOR_MAP", "BLOCKED_MAP", "BLOCKED_ACCESSOR_MAP", "MAX_DIMS", "map", "arrays", "fcn", "thisArg", "ndims", "xmmv", "ymmv", "shx", "shy", "iox", "ioy", "len", "sx", "sy", "ox", "oy", "ns", "x", "y", "i", "d", "main"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index be30da1..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,78 +0,0 @@ - -{{alias}}( arrays, fcn[, thisArg] ) - Applies a callback function to elements in an input ndarray and assigns - results to elements in an output ndarray. - - Each provided "ndarray" should be an object with following properties: - - - dtype: data type. - - data: data buffer. - - shape: dimensions. - - strides: stride lengths. - - offset: index offset. - - order: specifies whether an ndarray is row-major (C-style) or column-major - (Fortran-style). - - The callback function is provided the following arguments: - - - value: current array element. - - indices: current array element indices. - - arr: the input ndarray. - - Parameters - ---------- - arrays: ArrayLikeObject - Array-like object containing one input ndarray and one output ndarray. - - fcn: Function - Callback function. - - thisArg: any (optional) - Callback function execution context. - - Examples - -------- - // Define ndarray data and meta data... - > var xbuf = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ybuf = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] ); - > var dtype = 'float64'; - > var shape = [ 2, 2 ]; - > var sx = [ 2, 1 ]; - > var sy = [ 2, 1 ]; - > var ox = 0; - > var oy = 0; - > var order = 'row-major'; - - // Define a callback function: - > function f( v ) { return v*10.0; }; - - // Using ndarrays... - > var x = {{alias:@stdlib/ndarray/ctor}}( dtype, xbuf, shape, sx, ox, order ); - > var y = {{alias:@stdlib/ndarray/ctor}}( dtype, ybuf, shape, sy, oy, order ); - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - // Using minimal ndarray-like objects... - > x = { - ... 'dtype': dtype, - ... 'data': xbuf, - ... 'shape': shape, - ... 'strides': sx, - ... 'offset': ox, - ... 'order': order - ... }; - > y = { - ... 'dtype': dtype, - ... 'data': ybuf, - ... 'shape': shape, - ... 'strides': sy, - ... 'offset': oy, - ... 'order': order - ... }; - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - See Also - -------- diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 7bc28dd..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/// - -import { ndarray } from '@stdlib/types/ndarray'; -import map = require( './index' ); - -/** -* Mock function to create an ndarray-like object. -* -* @return ndarray-like object -*/ -function array(): ndarray { - const obj: ndarray = { - 'byteLength': 80, - 'BYTES_PER_ELEMENT': 8, - 'data': new Float64Array( 10 ), - 'dtype': 'float64', - 'flags': { - 'ROW_MAJOR_CONTIGUOUS': true, - 'COLUMN_MAJOR_CONTIGUOUS': false - }, - 'length': 10, - 'ndims': 1, - 'offset': 0, - 'order': 'row-major', - 'shape': [ 10 ], - 'strides': [ 1 ], - 'get': (): number => 0, - 'set': (): ndarray => obj - }; - return obj; -} - -/** -* Evaluates the identity function. -* -* @param x - input value -* @returns input value -*/ -function identity( x: number ): number { - return x; -} - -// TESTS // - -// The function returns `undefined`... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, identity ); // $ExpectType void - map( arrays, identity, {} ); // $ExpectType void -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object containing ndarray-like objects... -{ - map( 5, identity ); // $ExpectError - map( true, identity ); // $ExpectError - map( false, identity ); // $ExpectError - map( null, identity ); // $ExpectError - map( undefined, identity ); // $ExpectError - map( {}, identity ); // $ExpectError - map( [ 1 ], identity ); // $ExpectError - map( ( x: number ): number => x, identity ); // $ExpectError - - map( 5, identity, {} ); // $ExpectError - map( true, identity, {} ); // $ExpectError - map( false, identity, {} ); // $ExpectError - map( null, identity, {} ); // $ExpectError - map( undefined, identity, {} ); // $ExpectError - map( {}, identity, {} ); // $ExpectError - map( [ 1 ], identity, {} ); // $ExpectError - map( ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a callback function... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, '10' ); // $ExpectError - map( arrays, 5 ); // $ExpectError - map( arrays, true ); // $ExpectError - map( arrays, false ); // $ExpectError - map( arrays, null ); // $ExpectError - map( arrays, undefined ); // $ExpectError - map( arrays, [] ); // $ExpectError - map( arrays, {} ); // $ExpectError - - map( arrays, '10', {} ); // $ExpectError - map( arrays, 5, {} ); // $ExpectError - map( arrays, true, {} ); // $ExpectError - map( arrays, false, {} ); // $ExpectError - map( arrays, null, {} ); // $ExpectError - map( arrays, undefined, {} ); // $ExpectError - map( arrays, [], {} ); // $ExpectError - map( arrays, {}, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map(); // $ExpectError - map( arrays ); // $ExpectError{ - map( arrays, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index d89ee00..0000000 --- a/examples/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var ndarray2array = require( '@stdlib/ndarray-base-to-array' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var map = require( './../lib' ); - -var N = 10; -var x = { - 'dtype': 'generic', - 'data': filledarrayBy( N, 'generic', discreteUniform( -100, 100 ) ), - 'shape': [ 5, 2 ], - 'strides': [ 2, 1 ], - 'offset': 0, - 'order': 'row-major' -}; -var y = { - 'dtype': 'generic', - 'data': filledarray( 0, N, 'generic' ), - 'shape': x.shape.slice(), - 'strides': shape2strides( x.shape, 'column-major' ), - 'offset': 0, - 'order': 'column-major' -}; - -map( [ x, y ], naryFunction( abs, 1 ) ); -console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); -console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 97% rename from docs/types/index.d.ts rename to index.d.ts index 78ac9b8..9dd6ef1 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -18,7 +18,7 @@ // TypeScript Version: 4.1 -/// +/// import { ArrayLike } from '@stdlib/types/array'; import { typedndarray } from '@stdlib/types/ndarray'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..153a8e7 --- /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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-minmax-view-buffer-index@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import m from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var y="throw";var v="throw";var j=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport minmaxViewBufferIndex from '@stdlib/ndarray-base-minmax-view-buffer-index';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar xmmv;\n\tvar ymmv;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ns;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tns = 0; // number of singleton dimensions\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\n\t\t// Check whether the current dimension is a singleton dimension...\n\t\tif ( d === 1 ) {\n\t\t\tns += 1;\n\t\t}\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays...\n\tif ( ns === ndims-1 ) {\n\t\t// Get the index of the non-singleton dimension...\n\t\tfor ( i = 0; i < ndims; i++ ) {\n\t\t\tif ( shx[ i ] !== 1 ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tx.shape = [ shx[i] ];\n\t\ty.shape = x.shape;\n\t\tx.strides = [ sx[i] ];\n\t\ty.strides = [ sy[i] ];\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t}\n\n\tiox = iterationOrder( sx ); // +/-1\n\tioy = iterationOrder( sy ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine the minimum and maximum linear indices which are accessible by the array views:\n\t\txmmv = minmaxViewBufferIndex( shx, sx, x.offset );\n\t\tymmv = minmaxViewBufferIndex( shy, sy, y.offset );\n\n\t\t// Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays...\n\t\tif ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) {\n\t\t\t// Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values...\n\t\t\tif ( iox === 1 ) {\n\t\t\t\tox = xmmv[ 0 ];\n\t\t\t} else {\n\t\t\t\tox = xmmv[ 1 ];\n\t\t\t}\n\t\t\tif ( ioy === 1 ) {\n\t\t\t\toy = ymmv[ 0 ];\n\t\t\t} else {\n\t\t\t\toy = ymmv[ 1 ];\n\t\t\t}\n\t\t\tx.shape = [ len ];\n\t\t\ty.shape = x.shape;\n\t\t\tx.strides = [ iox ];\n\t\t\ty.strides = [ ioy ];\n\t\t\tx.offset = ox;\n\t\t\ty.offset = oy;\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality...\n\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration...\n\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","xmmv","ymmv","shx","shy","iox","ioy","len","ns","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","minmaxViewBufferIndex","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/lib/0d.js b/lib/0d.js deleted file mode 100644 index f19e08f..0000000 --- a/lib/0d.js +++ /dev/null @@ -1,100 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ){ -* return z * 10.0; -* } -* -* // Create a data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0 ] ); -* var ybuf = new Float64Array( 1 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offset: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like object: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* } -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0 ] -*/ -function map0d( x, y, fcn, thisArg ) { - y.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref ); -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/0d_accessors.js b/lib/0d_accessors.js deleted file mode 100644 index 0ce37b7..0000000 --- a/lib/0d_accessors.js +++ /dev/null @@ -1,121 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var ybuf = new Complex64Array( 2 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 30.0 -* -* var im = imagf( v ); -* // returns 40.0 -*/ -function map0d( x, y, fcn, thisArg ) { - y.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/10d.js b/lib/10d.js deleted file mode 100644 index f81fea5..0000000 --- a/lib/10d.js +++ /dev/null @@ -1,280 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_accessors.js b/lib/10d_accessors.js deleted file mode 100644 index b80eca7..0000000 --- a/lib/10d_accessors.js +++ /dev/null @@ -1,305 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_blocked.js b/lib/10d_blocked.js deleted file mode 100644 index 05863d6..0000000 --- a/lib/10d_blocked.js +++ /dev/null @@ -1,389 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/10d_blocked_accessors.js b/lib/10d_blocked_accessors.js deleted file mode 100644 index af78894..0000000 --- a/lib/10d_blocked_accessors.js +++ /dev/null @@ -1,414 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/1d.js b/lib/1d.js deleted file mode 100644 index b5f0220..0000000 --- a/lib/1d.js +++ /dev/null @@ -1,129 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 2 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 40.0, 60.0, 80.0 ] -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/1d_accessors.js b/lib/1d_accessors.js deleted file mode 100644 index b98015f..0000000 --- a/lib/1d_accessors.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 1 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/2d.js b/lib/2d.js deleted file mode 100644 index ac7b2fe..0000000 --- a/lib/2d.js +++ /dev/null @@ -1,166 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_accessors.js b/lib/2d_accessors.js deleted file mode 100644 index 07fb9c6..0000000 --- a/lib/2d_accessors.js +++ /dev/null @@ -1,191 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_blocked.js b/lib/2d_blocked.js deleted file mode 100644 index 9803bb4..0000000 --- a/lib/2d_blocked.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/2d_blocked_accessors.js b/lib/2d_blocked_accessors.js deleted file mode 100644 index 08e5eb7..0000000 --- a/lib/2d_blocked_accessors.js +++ /dev/null @@ -1,220 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/3d.js b/lib/3d.js deleted file mode 100644 index dd42769..0000000 --- a/lib/3d.js +++ /dev/null @@ -1,180 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_accessors.js b/lib/3d_accessors.js deleted file mode 100644 index 0a2042c..0000000 --- a/lib/3d_accessors.js +++ /dev/null @@ -1,205 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 2, 1 ]; -* var sy = [ 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var get; - var set; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_blocked.js b/lib/3d_blocked.js deleted file mode 100644 index d15d04c..0000000 --- a/lib/3d_blocked.js +++ /dev/null @@ -1,221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/3d_blocked_accessors.js b/lib/3d_blocked_accessors.js deleted file mode 100644 index 551417b..0000000 --- a/lib/3d_blocked_accessors.js +++ /dev/null @@ -1,246 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 2, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/4d.js b/lib/4d.js deleted file mode 100644 index 0556d8e..0000000 --- a/lib/4d.js +++ /dev/null @@ -1,194 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_accessors.js b/lib/4d_accessors.js deleted file mode 100644 index 1067a7e..0000000 --- a/lib/4d_accessors.js +++ /dev/null @@ -1,219 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_blocked.js b/lib/4d_blocked.js deleted file mode 100644 index 2b62030..0000000 --- a/lib/4d_blocked.js +++ /dev/null @@ -1,245 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/4d_blocked_accessors.js b/lib/4d_blocked_accessors.js deleted file mode 100644 index fe56f55..0000000 --- a/lib/4d_blocked_accessors.js +++ /dev/null @@ -1,270 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/5d.js b/lib/5d.js deleted file mode 100644 index fb138a5..0000000 --- a/lib/5d.js +++ /dev/null @@ -1,208 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_accessors.js b/lib/5d_accessors.js deleted file mode 100644 index 495e033..0000000 --- a/lib/5d_accessors.js +++ /dev/null @@ -1,233 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_blocked.js b/lib/5d_blocked.js deleted file mode 100644 index 7162107..0000000 --- a/lib/5d_blocked.js +++ /dev/null @@ -1,269 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/5d_blocked_accessors.js b/lib/5d_blocked_accessors.js deleted file mode 100644 index 4a0a880..0000000 --- a/lib/5d_blocked_accessors.js +++ /dev/null @@ -1,294 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/6d.js b/lib/6d.js deleted file mode 100644 index 0389a6e..0000000 --- a/lib/6d.js +++ /dev/null @@ -1,224 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map6d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_accessors.js b/lib/6d_accessors.js deleted file mode 100644 index 0287a54..0000000 --- a/lib/6d_accessors.js +++ /dev/null @@ -1,249 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_blocked.js b/lib/6d_blocked.js deleted file mode 100644 index e850edb..0000000 --- a/lib/6d_blocked.js +++ /dev/null @@ -1,293 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/6d_blocked_accessors.js b/lib/6d_blocked_accessors.js deleted file mode 100644 index 1acf143..0000000 --- a/lib/6d_blocked_accessors.js +++ /dev/null @@ -1,318 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var set; - var get; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/7d.js b/lib/7d.js deleted file mode 100644 index f2c6603..0000000 --- a/lib/7d.js +++ /dev/null @@ -1,238 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_accessors.js b/lib/7d_accessors.js deleted file mode 100644 index e50b3bf..0000000 --- a/lib/7d_accessors.js +++ /dev/null @@ -1,263 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_blocked.js b/lib/7d_blocked.js deleted file mode 100644 index 1b6ce95..0000000 --- a/lib/7d_blocked.js +++ /dev/null @@ -1,317 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/7d_blocked_accessors.js b/lib/7d_blocked_accessors.js deleted file mode 100644 index 52537bc..0000000 --- a/lib/7d_blocked_accessors.js +++ /dev/null @@ -1,342 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/8d.js b/lib/8d.js deleted file mode 100644 index 641c2f9..0000000 --- a/lib/8d.js +++ /dev/null @@ -1,252 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_accessors.js b/lib/8d_accessors.js deleted file mode 100644 index 08c4970..0000000 --- a/lib/8d_accessors.js +++ /dev/null @@ -1,277 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_blocked.js b/lib/8d_blocked.js deleted file mode 100644 index a52ab49..0000000 --- a/lib/8d_blocked.js +++ /dev/null @@ -1,341 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/8d_blocked_accessors.js b/lib/8d_blocked_accessors.js deleted file mode 100644 index e40b718..0000000 --- a/lib/8d_blocked_accessors.js +++ /dev/null @@ -1,366 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/9d.js b/lib/9d.js deleted file mode 100644 index ff40cad..0000000 --- a/lib/9d.js +++ /dev/null @@ -1,266 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_accessors.js b/lib/9d_accessors.js deleted file mode 100644 index ce30b37..0000000 --- a/lib/9d_accessors.js +++ /dev/null @@ -1,291 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_blocked.js b/lib/9d_blocked.js deleted file mode 100644 index 4440ee8..0000000 --- a/lib/9d_blocked.js +++ /dev/null @@ -1,365 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/9d_blocked_accessors.js b/lib/9d_blocked_accessors.js deleted file mode 100644 index 5998505..0000000 --- a/lib/9d_blocked_accessors.js +++ /dev/null @@ -1,390 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 80cf80e..0000000 --- a/lib/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray. -* -* @module @stdlib/ndarray-base-map -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var map = require( '@stdlib/ndarray-base-map' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 551b589..0000000 --- a/lib/main.js +++ /dev/null @@ -1,342 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var iterationOrder = require( '@stdlib/ndarray-base-iteration-order' ); -var minmaxViewBufferIndex = require( '@stdlib/ndarray-base-minmax-view-buffer-index' ); -var ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' ); -var blockedaccessormap2d = require( './2d_blocked_accessors.js' ); -var blockedaccessormap3d = require( './3d_blocked_accessors.js' ); -var blockedaccessormap4d = require( './4d_blocked_accessors.js' ); -var blockedaccessormap5d = require( './5d_blocked_accessors.js' ); -var blockedaccessormap6d = require( './6d_blocked_accessors.js' ); -var blockedaccessormap7d = require( './7d_blocked_accessors.js' ); -var blockedaccessormap8d = require( './8d_blocked_accessors.js' ); -var blockedaccessormap9d = require( './9d_blocked_accessors.js' ); -var blockedaccessormap10d = require( './10d_blocked_accessors.js' ); -var blockedmap2d = require( './2d_blocked.js' ); -var blockedmap3d = require( './3d_blocked.js' ); -var blockedmap4d = require( './4d_blocked.js' ); -var blockedmap5d = require( './5d_blocked.js' ); -var blockedmap6d = require( './6d_blocked.js' ); -var blockedmap7d = require( './7d_blocked.js' ); -var blockedmap8d = require( './8d_blocked.js' ); -var blockedmap9d = require( './9d_blocked.js' ); -var blockedmap10d = require( './10d_blocked.js' ); -var accessormap0d = require( './0d_accessors.js' ); -var accessormap1d = require( './1d_accessors.js' ); -var accessormap2d = require( './2d_accessors.js' ); -var accessormap3d = require( './3d_accessors.js' ); -var accessormap4d = require( './4d_accessors.js' ); -var accessormap5d = require( './5d_accessors.js' ); -var accessormap6d = require( './6d_accessors.js' ); -var accessormap7d = require( './7d_accessors.js' ); -var accessormap8d = require( './8d_accessors.js' ); -var accessormap9d = require( './9d_accessors.js' ); -var accessormap10d = require( './10d_accessors.js' ); -var accessormapnd = require( './nd_accessors.js' ); -var map0d = require( './0d.js' ); -var map1d = require( './1d.js' ); -var map2d = require( './2d.js' ); -var map3d = require( './3d.js' ); -var map4d = require( './4d.js' ); -var map5d = require( './5d.js' ); -var map6d = require( './6d.js' ); -var map7d = require( './7d.js' ); -var map8d = require( './8d.js' ); -var map9d = require( './9d.js' ); -var map10d = require( './10d.js' ); -var mapnd = require( './nd.js' ); - - -// VARIABLES // - -var MAP = [ - map0d, - map1d, - map2d, - map3d, - map4d, - map5d, - map6d, - map7d, - map8d, - map9d, - map10d -]; -var ACCESSOR_MAP = [ - accessormap0d, - accessormap1d, - accessormap2d, - accessormap3d, - accessormap4d, - accessormap5d, - accessormap6d, - accessormap7d, - accessormap8d, - accessormap9d, - accessormap10d -]; -var BLOCKED_MAP = [ - blockedmap2d, // 0 - blockedmap3d, - blockedmap4d, - blockedmap5d, - blockedmap6d, - blockedmap7d, - blockedmap8d, - blockedmap9d, - blockedmap10d // 8 -]; -var BLOCKED_ACCESSOR_MAP = [ - blockedaccessormap2d, // 0 - blockedaccessormap3d, - blockedaccessormap4d, - blockedaccessormap5d, - blockedaccessormap6d, - blockedaccessormap7d, - blockedaccessormap8d, - blockedaccessormap9d, - blockedaccessormap10d // 8 -]; -var MAX_DIMS = MAP.length -1; - - -// MAIN // - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* ## Notes -* -* - Each provided ndarray should be an `object` with the following properties: -* -* - **dtype**: data type. -* - **data**: data buffer. -* - **shape**: dimensions. -* - **strides**: stride lengths. -* - **offset**: index offset. -* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style). -* -* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array -* @param {Callback} fcn - callback function -* @param {*} [thisArg] - callback execution context -* @throws {Error} arrays must have the same number of dimensions -* @throws {Error} arrays must have the same shape -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map( arrays, fcn, thisArg ) { - var ndims; - var xmmv; - var ymmv; - var shx; - var shy; - var iox; - var ioy; - var len; - var sx; - var sy; - var ox; - var oy; - var ns; - var x; - var y; - var i; - var d; - - // Unpack the ndarrays and standardize ndarray meta data: - x = ndarray2object( arrays[ 0 ] ); - y = ndarray2object( arrays[ 1 ] ); - - // Verify that the input and output arrays have the same number of dimensions... - shx = x.shape; - shy = y.shape; - ndims = shx.length; - if ( ndims !== shy.length ) { - throw new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' ); - } - // Determine whether we can avoid iteration altogether... - if ( ndims === 0 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Verify that the input and output arrays have the same dimensions... - len = 1; // number of elements - ns = 0; // number of singleton dimensions - for ( i = 0; i < ndims; i++ ) { - d = shx[ i ]; - if ( d !== shy[ i ] ) { - throw new Error( 'invalid arguments. Array must have the same shape.' ); - } - // Note that, if one of the dimensions is `0`, the length will be `0`... - len *= d; - - // Check whether the current dimension is a singleton dimension... - if ( d === 1 ) { - ns += 1; - } - } - // Check whether we were provided empty ndarrays... - if ( len === 0 ) { - return; - } - // Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays... - if ( ndims === 1 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - - sx = x.strides; - sy = y.strides; - - // Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays... - if ( ns === ndims-1 ) { - // Get the index of the non-singleton dimension... - for ( i = 0; i < ndims; i++ ) { - if ( shx[ i ] !== 1 ) { - break; - } - } - x.shape = [ shx[i] ]; - y.shape = x.shape; - x.strides = [ sx[i] ]; - y.strides = [ sy[i] ]; - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg ); - } - return MAP[ 1 ]( x, y, fcn, thisArg ); - } - - iox = iterationOrder( sx ); // +/-1 - ioy = iterationOrder( sy ); // +/-1 - - // Determine whether we can avoid blocked iteration... - if ( iox !== 0 && ioy !== 0 && iox === ioy ) { - // Determine the minimum and maximum linear indices which are accessible by the array views: - xmmv = minmaxViewBufferIndex( shx, sx, x.offset ); - ymmv = minmaxViewBufferIndex( shy, sy, y.offset ); - - // Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays... - if ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) { - // Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values... - if ( iox === 1 ) { - ox = xmmv[ 0 ]; - } else { - ox = xmmv[ 1 ]; - } - if ( ioy === 1 ) { - oy = ymmv[ 0 ]; - } else { - oy = ymmv[ 1 ]; - } - x.shape = [ len ]; - y.shape = x.shape; - x.strides = [ iox ]; - y.strides = [ ioy ]; - x.offset = ox; - y.offset = oy; - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg ); - } - return MAP[ 1 ]( x, y, fcn, thisArg ); - } - // At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality... - - // Determine whether we can use simple nested loops... - if ( ndims <= MAX_DIMS ) { - // So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration... - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Fall-through to blocked iteration... - } - // At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration... - - // Determine whether we can perform blocked iteration... - if ( ndims <= MAX_DIMS ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - return BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - // Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)... - if ( x.accessorProtocol || y.accessorProtocol ) { - return accessormapnd( x, y, fcn, thisArg ); - } - mapnd( x, y, fcn, thisArg ); -} - - -// EXPORTS // - -module.exports = map; diff --git a/lib/nd.js b/lib/nd.js deleted file mode 100644 index 379d56e..0000000 --- a/lib/nd.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/lib/nd_accessors.js b/lib/nd_accessors.js deleted file mode 100644 index a28998b..0000000 --- a/lib/nd_accessors.js +++ /dev/null @@ -1,179 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var get; - var set; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/package.json b/package.json index e6048e5..c1b688b 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Apply a callback to elements in an input ndarray and assign results to elements in an output ndarray.", "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,70 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-reverse": "^0.2.2", - "@stdlib/array-base-take-indexed": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/ndarray-base-ind2sub": "^0.2.2", - "@stdlib/ndarray-base-iteration-order": "^0.2.2", - "@stdlib/ndarray-base-minmax-view-buffer-index": "^0.2.2", - "@stdlib/ndarray-base-ndarraylike2object": "^0.2.2", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", - "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.1", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-complex128": "^0.3.0", - "@stdlib/array-filled": "^0.2.1", - "@stdlib/array-filled-by": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/array-ones": "^0.2.1", - "@stdlib/array-typed-complex-ctors": "^0.2.2", - "@stdlib/array-zeros": "^0.2.2", - "@stdlib/assert-is-same-complex128array": "^0.2.2", - "@stdlib/assert-is-same-float64array": "^0.2.2", - "@stdlib/blas-ext-base-dfill": "^0.2.2", - "@stdlib/blas-ext-base-gfill": "^0.2.1", - "@stdlib/complex-float64-ctor": "^0.0.3", - "@stdlib/complex-float64-imag": "^0.1.1", - "@stdlib/complex-float64-real": "^0.1.1", - "@stdlib/math-base-assert-is-nan": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/math-base-special-cbrt": "^0.2.2", - "@stdlib/math-base-special-floor": "^0.2.3", - "@stdlib/math-base-special-identity": "^0.2.2", - "@stdlib/math-base-special-pow": "^0.3.0", - "@stdlib/math-base-special-sqrt": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-strides2offset": "^0.2.2", - "@stdlib/ndarray-base-to-array": "^0.2.1", - "@stdlib/ndarray-ctor": "^0.2.2", - "@stdlib/ndarray-from-scalar": "^0.2.1", - "@stdlib/random-base-discrete-uniform": "^0.2.1", - "@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", "base", @@ -113,9 +26,8 @@ "transform", "for-each" ], - "__stdlib__": {}, "funding": { "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..3fba414 --- /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.0d.js b/test/test.0d.js deleted file mode 100644 index 1648cc8..0000000 --- a/test/test.0d.js +++ /dev/null @@ -1,89 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var scalar2ndarray = require( '@stdlib/ndarray-from-scalar' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( 1.0, { - 'dtype': 'float64' - }); - y = scalar2ndarray( 0.0, { - 'dtype': 'float64' - }); - - map( [ x, y ], scale ); - - expected = new Float64Array( [ 10.0 ] ); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( new Complex128( 1.0, 1.0 ), { - 'dtype': 'complex128' - }); - y = scalar2ndarray( new Complex128( 0.0, 0.0 ), { - 'dtype': 'complex128' - }); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ 10.0, 10.0 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.10d.js b/test/test.10d.js deleted file mode 100644 index 74b3998..0000000 --- a/test/test.10d.js +++ /dev/null @@ -1,2667 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -1, -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.1d.js b/test/test.1d.js deleted file mode 100644 index 21e0604..0000000 --- a/test/test.1d.js +++ /dev/null @@ -1,134 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (empty array)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'complex128', ones( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - y = ndarray( 'complex128', zeros( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.2d.js b/test/test.2d.js deleted file mode 100644 index 3e94e94..0000000 --- a/test/test.2d.js +++ /dev/null @@ -1,1195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( x.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.3d.js b/test/test.3d.js deleted file mode 100644 index 07f7516..0000000 --- a/test/test.3d.js +++ /dev/null @@ -1,1331 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ bsize*8, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 2 ]; - st = [ -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ -bsize*8, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ -1, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 2 ]; - st = [ -1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.4d.js b/test/test.4d.js deleted file mode 100644 index 8864e09..0000000 --- a/test/test.4d.js +++ /dev/null @@ -1,1503 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ -2, -2, -1, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ bsize*8, bsize*4, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ bsize*8, bsize*4, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ -bsize*4, bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2 ]; - st = [ -bsize*4, bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ 2, 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ 2, 2, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 1, 2 ]; - st = [ 2, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1 ]; - st = [ 1, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ 2, 4, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*4 ]; - st = [ 2, 4, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.5d.js b/test/test.5d.js deleted file mode 100644 index 16f3119..0000000 --- a/test/test.5d.js +++ /dev/null @@ -1,1740 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -8, -4, -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ -2, 4, -bsize*8, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, 4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ -2, 4, -4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1 ]; - st = [ -2, 4, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, -4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ 2, 4, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.6d.js b/test/test.6d.js deleted file mode 100644 index 41fef40..0000000 --- a/test/test.6d.js +++ /dev/null @@ -1,1892 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, -16, 8, -4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, -4, -4, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.7d.js b/test/test.7d.js deleted file mode 100644 index 8a3a7fe..0000000 --- a/test/test.7d.js +++ /dev/null @@ -1,2099 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, 8, -4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 1, 2 ]; - st = [ bsize*16, -8, 8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -8, -8, -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, -8, 4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ bsize*16, -8, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*16, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 2, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, bsize*8, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 2, 1 ]; - st = [ 2, -4, bsize*8, bsize*8, -bsize*16, bsize*16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 1, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, -2, 4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, -bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.8d.js b/test/test.8d.js deleted file mode 100644 index 2dc6333..0000000 --- a/test/test.8d.js +++ /dev/null @@ -1,2221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, -16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, 16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.9d.js b/test/test.9d.js deleted file mode 100644 index 2a38c2e..0000000 --- a/test/test.9d.js +++ /dev/null @@ -1,2447 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 5512e2c..0000000 --- a/test/test.js +++ /dev/null @@ -1,139 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same number of dimensions', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2 ] ], - [ [ 2, 2 ], [ 2, 2, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ], - [ [ 2, 2, 1, 2 ], [ 2, 1, 2 ] ], - [ [ 1, 1, 4, 2, 2, 2 ], [ 10, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same shape', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2, 2 ] ], - [ [ 3, 3 ], [ 2, 2 ] ], - [ [ 5, 5, 5 ], [ 5, 5, 4 ] ], - [ [ 1, 1, 1 ], [ 2, 2, 2 ] ], - [ [ 1, 4, 1, 2, 2 ], [ 3, 8 ] ], - [ [ 10, 2, 1 ], [ 1, 2, 10 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); diff --git a/test/test.nd.js b/test/test.nd.js deleted file mode 100644 index 9e4b18d..0000000 --- a/test/test.nd.js +++ /dev/null @@ -1,822 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset(sh, st); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); From 0b25702adab6a72e874a6e6f6eb7e1ba6185236d Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 28 Sep 2024 21:23:11 +0000 Subject: [PATCH 09/32] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 80e447a..e6048e5 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,8 @@ "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.1" + "@stdlib/types": "^0.4.1", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-complex128": "^0.3.0", @@ -117,4 +118,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 6807aca2c39d5c81797e95f1b89ffc2311f5868e Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 28 Sep 2024 21:36:39 +0000 Subject: [PATCH 10/32] Remove files --- index.d.ts | 117 -- index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 4964 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 9dd6ef1..0000000 --- a/index.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { ArrayLike } from '@stdlib/types/array'; -import { typedndarray } from '@stdlib/types/ndarray'; - -/** -* Callback invoked for each ndarray element. -* -* @returns output value -*/ -type Nullary = ( this: V ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @returns output value -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @returns output value -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Ternary = ( this: V, value: T, indices: Array, arr: typedndarray ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Callback = Nullary | Unary | Binary | Ternary; - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* @param arrays - array-like object containing one input ndarray and one output ndarray -* @param fcn - callback function -* @param thisArg - callback function execution context -* @throws arrays must have the same number of dimensions -* @throws arrays must have the same shape -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var ndarray = require( '@stdlib/ndarray-ctor' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarrays: -* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' ); -* var y = ndarray( 'float64', ybuf, shape, sy, oy, 'row-major' ); -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -declare function map( arrays: ArrayLike>, fcn: Callback, thisArg?: ThisParameterType> ): void; - - -// EXPORTS // - -export = map; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 153a8e7..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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-minmax-view-buffer-index@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import m from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var y="throw";var v="throw";var j=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport minmaxViewBufferIndex from '@stdlib/ndarray-base-minmax-view-buffer-index';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar xmmv;\n\tvar ymmv;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ns;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tns = 0; // number of singleton dimensions\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\n\t\t// Check whether the current dimension is a singleton dimension...\n\t\tif ( d === 1 ) {\n\t\t\tns += 1;\n\t\t}\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays...\n\tif ( ns === ndims-1 ) {\n\t\t// Get the index of the non-singleton dimension...\n\t\tfor ( i = 0; i < ndims; i++ ) {\n\t\t\tif ( shx[ i ] !== 1 ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tx.shape = [ shx[i] ];\n\t\ty.shape = x.shape;\n\t\tx.strides = [ sx[i] ];\n\t\ty.strides = [ sy[i] ];\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t}\n\n\tiox = iterationOrder( sx ); // +/-1\n\tioy = iterationOrder( sy ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine the minimum and maximum linear indices which are accessible by the array views:\n\t\txmmv = minmaxViewBufferIndex( shx, sx, x.offset );\n\t\tymmv = minmaxViewBufferIndex( shy, sy, y.offset );\n\n\t\t// Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays...\n\t\tif ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) {\n\t\t\t// Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values...\n\t\t\tif ( iox === 1 ) {\n\t\t\t\tox = xmmv[ 0 ];\n\t\t\t} else {\n\t\t\t\tox = xmmv[ 1 ];\n\t\t\t}\n\t\t\tif ( ioy === 1 ) {\n\t\t\t\toy = ymmv[ 0 ];\n\t\t\t} else {\n\t\t\t\toy = ymmv[ 1 ];\n\t\t\t}\n\t\t\tx.shape = [ len ];\n\t\t\ty.shape = x.shape;\n\t\t\tx.strides = [ iox ];\n\t\t\ty.strides = [ ioy ];\n\t\t\tx.offset = ox;\n\t\t\ty.offset = oy;\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality...\n\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration...\n\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","xmmv","ymmv","shx","shy","iox","ioy","len","ns","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","minmaxViewBufferIndex","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 3fba414..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 255d58d6c0e8183214ac22bc717006c644685ab6 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 28 Sep 2024 21:37:10 +0000 Subject: [PATCH 11/32] 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 | 53 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 51 +- SECURITY.md | 5 - .../benchmark.10d_blocked_columnmajor.js | 148 - benchmark/benchmark.10d_blocked_rowmajor.js | 148 - benchmark/benchmark.10d_columnmajor.js | 148 - benchmark/benchmark.10d_rowmajor.js | 148 - benchmark/benchmark.11d_columnmajor.js | 148 - benchmark/benchmark.11d_rowmajor.js | 148 - benchmark/benchmark.1d_columnmajor.js | 137 - benchmark/benchmark.1d_rowmajor.js | 137 - benchmark/benchmark.2d_blocked_columnmajor.js | 149 - benchmark/benchmark.2d_blocked_rowmajor.js | 149 - benchmark/benchmark.2d_columnmajor.js | 149 - benchmark/benchmark.2d_rowmajor.js | 150 - benchmark/benchmark.2d_rowmajor_accessors.js | 177 - ...benchmark.2d_rowmajor_accessors_complex.js | 184 - benchmark/benchmark.3d_blocked_columnmajor.js | 149 - benchmark/benchmark.3d_blocked_rowmajor.js | 149 - benchmark/benchmark.3d_columnmajor.js | 149 - benchmark/benchmark.3d_rowmajor.js | 149 - benchmark/benchmark.4d_blocked_columnmajor.js | 148 - benchmark/benchmark.4d_blocked_rowmajor.js | 148 - benchmark/benchmark.4d_columnmajor.js | 148 - benchmark/benchmark.4d_rowmajor.js | 148 - benchmark/benchmark.5d_blocked_columnmajor.js | 148 - benchmark/benchmark.5d_blocked_rowmajor.js | 148 - benchmark/benchmark.5d_columnmajor.js | 148 - benchmark/benchmark.5d_rowmajor.js | 148 - benchmark/benchmark.6d_blocked_columnmajor.js | 148 - benchmark/benchmark.6d_blocked_rowmajor.js | 148 - benchmark/benchmark.6d_columnmajor.js | 148 - benchmark/benchmark.6d_rowmajor.js | 148 - benchmark/benchmark.7d_blocked_columnmajor.js | 148 - benchmark/benchmark.7d_blocked_rowmajor.js | 148 - benchmark/benchmark.7d_columnmajor.js | 148 - benchmark/benchmark.7d_rowmajor.js | 148 - benchmark/benchmark.8d_blocked_columnmajor.js | 148 - benchmark/benchmark.8d_blocked_rowmajor.js | 148 - benchmark/benchmark.8d_columnmajor.js | 148 - benchmark/benchmark.8d_rowmajor.js | 148 - benchmark/benchmark.9d_blocked_columnmajor.js | 148 - benchmark/benchmark.9d_blocked_rowmajor.js | 148 - benchmark/benchmark.9d_columnmajor.js | 148 - benchmark/benchmark.9d_rowmajor.js | 148 - branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 19 - dist/index.js.map | 7 - docs/repl.txt | 78 - docs/types/test.ts | 128 - examples/index.js | 50 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/0d.js | 100 - lib/0d_accessors.js | 121 - lib/10d.js | 280 - lib/10d_accessors.js | 305 -- lib/10d_blocked.js | 389 -- lib/10d_blocked_accessors.js | 414 -- lib/1d.js | 129 - lib/1d_accessors.js | 154 - lib/2d.js | 166 - lib/2d_accessors.js | 191 - lib/2d_blocked.js | 195 - lib/2d_blocked_accessors.js | 220 - lib/3d.js | 180 - lib/3d_accessors.js | 205 - lib/3d_blocked.js | 221 - lib/3d_blocked_accessors.js | 246 - lib/4d.js | 194 - lib/4d_accessors.js | 219 - lib/4d_blocked.js | 245 - lib/4d_blocked_accessors.js | 270 - lib/5d.js | 208 - lib/5d_accessors.js | 233 - lib/5d_blocked.js | 269 - lib/5d_blocked_accessors.js | 294 - lib/6d.js | 224 - lib/6d_accessors.js | 249 - lib/6d_blocked.js | 293 - lib/6d_blocked_accessors.js | 318 -- lib/7d.js | 238 - lib/7d_accessors.js | 263 - lib/7d_blocked.js | 317 -- lib/7d_blocked_accessors.js | 342 -- lib/8d.js | 252 - lib/8d_accessors.js | 277 - lib/8d_blocked.js | 341 -- lib/8d_blocked_accessors.js | 366 -- lib/9d.js | 266 - lib/9d_accessors.js | 291 - lib/9d_blocked.js | 365 -- lib/9d_blocked_accessors.js | 390 -- lib/index.js | 81 - lib/main.js | 342 -- lib/nd.js | 154 - lib/nd_accessors.js | 179 - package.json | 94 +- stats.html | 4842 +++++++++++++++++ test/dist/test.js | 33 - test/test.0d.js | 89 - test/test.10d.js | 2667 --------- test/test.1d.js | 134 - test/test.2d.js | 1195 ---- test/test.3d.js | 1331 ----- test/test.4d.js | 1503 ----- test/test.5d.js | 1740 ------ test/test.6d.js | 1892 ------- test/test.7d.js | 2099 ------- test/test.8d.js | 2221 -------- test/test.9d.js | 2447 --------- test/test.js | 139 - test/test.nd.js | 822 --- 137 files changed, 4872 insertions(+), 39272 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.10d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.10d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.10d_columnmajor.js delete mode 100644 benchmark/benchmark.10d_rowmajor.js delete mode 100644 benchmark/benchmark.11d_columnmajor.js delete mode 100644 benchmark/benchmark.11d_rowmajor.js delete mode 100644 benchmark/benchmark.1d_columnmajor.js delete mode 100644 benchmark/benchmark.1d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.2d_columnmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors_complex.js delete mode 100644 benchmark/benchmark.3d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.3d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.3d_columnmajor.js delete mode 100644 benchmark/benchmark.3d_rowmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.4d_columnmajor.js delete mode 100644 benchmark/benchmark.4d_rowmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.5d_columnmajor.js delete mode 100644 benchmark/benchmark.5d_rowmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.6d_columnmajor.js delete mode 100644 benchmark/benchmark.6d_rowmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.7d_columnmajor.js delete mode 100644 benchmark/benchmark.7d_rowmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.8d_columnmajor.js delete mode 100644 benchmark/benchmark.8d_rowmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.9d_columnmajor.js delete mode 100644 benchmark/benchmark.9d_rowmajor.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 (97%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/0d.js delete mode 100644 lib/0d_accessors.js delete mode 100644 lib/10d.js delete mode 100644 lib/10d_accessors.js delete mode 100644 lib/10d_blocked.js delete mode 100644 lib/10d_blocked_accessors.js delete mode 100644 lib/1d.js delete mode 100644 lib/1d_accessors.js delete mode 100644 lib/2d.js delete mode 100644 lib/2d_accessors.js delete mode 100644 lib/2d_blocked.js delete mode 100644 lib/2d_blocked_accessors.js delete mode 100644 lib/3d.js delete mode 100644 lib/3d_accessors.js delete mode 100644 lib/3d_blocked.js delete mode 100644 lib/3d_blocked_accessors.js delete mode 100644 lib/4d.js delete mode 100644 lib/4d_accessors.js delete mode 100644 lib/4d_blocked.js delete mode 100644 lib/4d_blocked_accessors.js delete mode 100644 lib/5d.js delete mode 100644 lib/5d_accessors.js delete mode 100644 lib/5d_blocked.js delete mode 100644 lib/5d_blocked_accessors.js delete mode 100644 lib/6d.js delete mode 100644 lib/6d_accessors.js delete mode 100644 lib/6d_blocked.js delete mode 100644 lib/6d_blocked_accessors.js delete mode 100644 lib/7d.js delete mode 100644 lib/7d_accessors.js delete mode 100644 lib/7d_blocked.js delete mode 100644 lib/7d_blocked_accessors.js delete mode 100644 lib/8d.js delete mode 100644 lib/8d_accessors.js delete mode 100644 lib/8d_blocked.js delete mode 100644 lib/8d_blocked_accessors.js delete mode 100644 lib/9d.js delete mode 100644 lib/9d_accessors.js delete mode 100644 lib/9d_blocked.js delete mode 100644 lib/9d_blocked_accessors.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js delete mode 100644 lib/nd.js delete mode 100644 lib/nd_accessors.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.0d.js delete mode 100644 test/test.10d.js delete mode 100644 test/test.1d.js delete mode 100644 test/test.2d.js delete mode 100644 test/test.3d.js delete mode 100644 test/test.4d.js delete mode 100644 test/test.5d.js delete mode 100644 test/test.6d.js delete mode 100644 test/test.7d.js delete mode 100644 test/test.8d.js delete mode 100644 test/test.9d.js delete mode 100644 test/test.js delete mode 100644 test/test.nd.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 00c9c4d..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/ndarray/base/map) 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 0696b91..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/ndarray/base/map) 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 1c89592..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: '29 17 * * 1' - - # 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 + + ```
@@ -214,7 +205,7 @@ console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); ## 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.10d_blocked_columnmajor.js b/benchmark/benchmark.10d_blocked_columnmajor.js deleted file mode 100644 index 05f9922..0000000 --- a/benchmark/benchmark.10d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_blocked_rowmajor.js b/benchmark/benchmark.10d_blocked_rowmajor.js deleted file mode 100644 index 19d212d..0000000 --- a/benchmark/benchmark.10d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_columnmajor.js b/benchmark/benchmark.10d_columnmajor.js deleted file mode 100644 index e74d522..0000000 --- a/benchmark/benchmark.10d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_rowmajor.js b/benchmark/benchmark.10d_rowmajor.js deleted file mode 100644 index e40298d..0000000 --- a/benchmark/benchmark.10d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_columnmajor.js b/benchmark/benchmark.11d_columnmajor.js deleted file mode 100644 index 4e0ed2b..0000000 --- a/benchmark/benchmark.11d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_rowmajor.js b/benchmark/benchmark.11d_rowmajor.js deleted file mode 100644 index febbfb1..0000000 --- a/benchmark/benchmark.11d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_columnmajor.js b/benchmark/benchmark.1d_columnmajor.js deleted file mode 100644 index 90b6a68..0000000 --- a/benchmark/benchmark.1d_columnmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_rowmajor.js b/benchmark/benchmark.1d_rowmajor.js deleted file mode 100644 index 4b8aef0..0000000 --- a/benchmark/benchmark.1d_rowmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_columnmajor.js b/benchmark/benchmark.2d_blocked_columnmajor.js deleted file mode 100644 index 7756089..0000000 --- a/benchmark/benchmark.2d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_rowmajor.js b/benchmark/benchmark.2d_blocked_rowmajor.js deleted file mode 100644 index 211ca54..0000000 --- a/benchmark/benchmark.2d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_columnmajor.js b/benchmark/benchmark.2d_columnmajor.js deleted file mode 100644 index 619a510..0000000 --- a/benchmark/benchmark.2d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor.js b/benchmark/benchmark.2d_rowmajor.js deleted file mode 100644 index 6144d5f..0000000 --- a/benchmark/benchmark.2d_rowmajor.js +++ /dev/null @@ -1,150 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors.js b/benchmark/benchmark.2d_rowmajor_accessors.js deleted file mode 100644 index 7ec19ae..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors.js +++ /dev/null @@ -1,177 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf[ idx ]; -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf[ idx ] = value; -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors_complex.js b/benchmark/benchmark.2d_rowmajor_accessors_complex.js deleted file mode 100644 index 83ca6f9..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors_complex.js +++ /dev/null @@ -1,184 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var ctors = require( '@stdlib/array-typed-complex-ctors' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'complex64' ]; -var order = 'row-major'; -var abtype = { - 'complex64': 'float32', - 'complex128': 'float64' -}; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf.get( idx ); -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf.set( value, idx ); -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var xbuf; - var ybuf; - var x; - var y; - - xbuf = filledarrayBy( len*2, abtype[ xtype ], discreteUniform( -100, 100 ) ); // eslint-disable-line max-len - ybuf = filledarray( 0.0, len*2, abtype[ ytype ] ); - x = { - 'dtype': xtype, - 'data': new ( ctors( xtype ) )( xbuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': new ( ctors( ytype ) )( ybuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 5; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_columnmajor.js b/benchmark/benchmark.3d_blocked_columnmajor.js deleted file mode 100644 index a1415e4..0000000 --- a/benchmark/benchmark.3d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_rowmajor.js b/benchmark/benchmark.3d_blocked_rowmajor.js deleted file mode 100644 index 827061e..0000000 --- a/benchmark/benchmark.3d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_columnmajor.js b/benchmark/benchmark.3d_columnmajor.js deleted file mode 100644 index f318ef9..0000000 --- a/benchmark/benchmark.3d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_rowmajor.js b/benchmark/benchmark.3d_rowmajor.js deleted file mode 100644 index e4c81c8..0000000 --- a/benchmark/benchmark.3d_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_columnmajor.js b/benchmark/benchmark.4d_blocked_columnmajor.js deleted file mode 100644 index c581273..0000000 --- a/benchmark/benchmark.4d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_rowmajor.js b/benchmark/benchmark.4d_blocked_rowmajor.js deleted file mode 100644 index 1af5db2..0000000 --- a/benchmark/benchmark.4d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_columnmajor.js b/benchmark/benchmark.4d_columnmajor.js deleted file mode 100644 index c12b8f0..0000000 --- a/benchmark/benchmark.4d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_rowmajor.js b/benchmark/benchmark.4d_rowmajor.js deleted file mode 100644 index 6f5497f..0000000 --- a/benchmark/benchmark.4d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_columnmajor.js b/benchmark/benchmark.5d_blocked_columnmajor.js deleted file mode 100644 index 5dfce4d..0000000 --- a/benchmark/benchmark.5d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_rowmajor.js b/benchmark/benchmark.5d_blocked_rowmajor.js deleted file mode 100644 index 72441a9..0000000 --- a/benchmark/benchmark.5d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_columnmajor.js b/benchmark/benchmark.5d_columnmajor.js deleted file mode 100644 index e24d575..0000000 --- a/benchmark/benchmark.5d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_rowmajor.js b/benchmark/benchmark.5d_rowmajor.js deleted file mode 100644 index e4fa039..0000000 --- a/benchmark/benchmark.5d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_columnmajor.js b/benchmark/benchmark.6d_blocked_columnmajor.js deleted file mode 100644 index bba975a..0000000 --- a/benchmark/benchmark.6d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_rowmajor.js b/benchmark/benchmark.6d_blocked_rowmajor.js deleted file mode 100644 index 5a3e6c8..0000000 --- a/benchmark/benchmark.6d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_columnmajor.js b/benchmark/benchmark.6d_columnmajor.js deleted file mode 100644 index bb10e51..0000000 --- a/benchmark/benchmark.6d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_rowmajor.js b/benchmark/benchmark.6d_rowmajor.js deleted file mode 100644 index 8018750..0000000 --- a/benchmark/benchmark.6d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_columnmajor.js b/benchmark/benchmark.7d_blocked_columnmajor.js deleted file mode 100644 index f850be3..0000000 --- a/benchmark/benchmark.7d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_rowmajor.js b/benchmark/benchmark.7d_blocked_rowmajor.js deleted file mode 100644 index 3f0687d..0000000 --- a/benchmark/benchmark.7d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_columnmajor.js b/benchmark/benchmark.7d_columnmajor.js deleted file mode 100644 index 5c40d66..0000000 --- a/benchmark/benchmark.7d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_rowmajor.js b/benchmark/benchmark.7d_rowmajor.js deleted file mode 100644 index 8b1903e..0000000 --- a/benchmark/benchmark.7d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_columnmajor.js b/benchmark/benchmark.8d_blocked_columnmajor.js deleted file mode 100644 index 6a55307..0000000 --- a/benchmark/benchmark.8d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_rowmajor.js b/benchmark/benchmark.8d_blocked_rowmajor.js deleted file mode 100644 index 2beb175..0000000 --- a/benchmark/benchmark.8d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_columnmajor.js b/benchmark/benchmark.8d_columnmajor.js deleted file mode 100644 index 92e3036..0000000 --- a/benchmark/benchmark.8d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_rowmajor.js b/benchmark/benchmark.8d_rowmajor.js deleted file mode 100644 index 02fd596..0000000 --- a/benchmark/benchmark.8d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_columnmajor.js b/benchmark/benchmark.9d_blocked_columnmajor.js deleted file mode 100644 index 8b5919f..0000000 --- a/benchmark/benchmark.9d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_rowmajor.js b/benchmark/benchmark.9d_blocked_rowmajor.js deleted file mode 100644 index b44f12a..0000000 --- a/benchmark/benchmark.9d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_columnmajor.js b/benchmark/benchmark.9d_columnmajor.js deleted file mode 100644 index 7f608ec..0000000 --- a/benchmark/benchmark.9d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_rowmajor.js b/benchmark/benchmark.9d_rowmajor.js deleted file mode 100644 index 90cb754..0000000 --- a/benchmark/benchmark.9d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/branches.md b/branches.md deleted file mode 100644 index 458a893..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/ndarray/base/map" -%% click B href "https://github.com/stdlib-js/ndarray-base-map/tree/main" -%% click C href "https://github.com/stdlib-js/ndarray-base-map/tree/production" -%% click D href "https://github.com/stdlib-js/ndarray-base-map/tree/esm" -%% click E href "https://github.com/stdlib-js/ndarray-base-map/tree/deno" -%% click F href "https://github.com/stdlib-js/ndarray-base-map/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/map -[production-url]: https://github.com/stdlib-js/ndarray-base-map/tree/production -[deno-url]: https://github.com/stdlib-js/ndarray-base-map/tree/deno -[deno-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/ndarray-base-map/tree/umd -[umd-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/ndarray-base-map/tree/esm -[esm-readme]: https://github.com/stdlib-js/ndarray-base-map/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 4504e2e..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import map from '../docs/types/index'; -export = map; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index fd1d096..0000000 --- a/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict";var ur=function(a,v){return function(){return v||a((v={exports:{}}).exports,v),v.exports}};var Lr=ur(function(g0,Kr){"use strict";var hv=require("@stdlib/ndarray-base-unary-loop-interchange-order"),mv=require("@stdlib/ndarray-base-unary-tiling-block-size"),kv=require("@stdlib/array-base-take-indexed"),zv=require("@stdlib/array-base-reverse");function gv(a,v,U,Q){var r,V,K,L,I,B,E,M,T,D,C,O,S,s,h,c,k,q,g,i,j,f,u,o,x,e;for(e=hv(a.shape,a.strides,v.strides),S=e.sh,c=e.sx,k=e.sy,D=zv(e.idx),r=mv(a.dtype,v.dtype),q=a.offset,g=v.offset,V=a.data,K=v.data,L=c[0],B=k[0],x=S[1];x>0;)for(x0;)for(o0;)for(y0;)for(p0;)for(l0;)for(R0;)for(_0;)for(n0;)for(w0;)for(N0;)for(F0;)for(H0;)for(W0;)for(J0;)for(ir0;)for(ar0;)for(A0;)for(Z0;)for(Y0;)for(or0;)for(tr0;)for(fr0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(Sr0;)for(pr0;)for(yr0;)for(tr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(Mr0;)for(Er0;)for(Tr0;)for(Pr0;)for(Or0;)for(wr0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(u0;)for(f0;)for(l0;)for(d0;)for(m0;)for(n0;)for(w0;)for(t0;)for(z0;)for(H0;)for(W0;)for(J0;)for(G0;)for(X0;)for(A0;)for(Z0;)for(Y0;)for(or0;)for($0;)for(N0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(ir0;)for(ar0;)for(lr0;)for(cr0;)for(Sr0;)for(pr0;)for(yr0;)for(tr0;)for(fr0;)for(dr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(Tr0;)for(Pr0;)for(Or0;)for(wr0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder = require( '@stdlib/ndarray-base-iteration-order' );\nvar minmaxViewBufferIndex = require( '@stdlib/ndarray-base-minmax-view-buffer-index' );\nvar ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' );\nvar blockedaccessormap2d = require( './2d_blocked_accessors.js' );\nvar blockedaccessormap3d = require( './3d_blocked_accessors.js' );\nvar blockedaccessormap4d = require( './4d_blocked_accessors.js' );\nvar blockedaccessormap5d = require( './5d_blocked_accessors.js' );\nvar blockedaccessormap6d = require( './6d_blocked_accessors.js' );\nvar blockedaccessormap7d = require( './7d_blocked_accessors.js' );\nvar blockedaccessormap8d = require( './8d_blocked_accessors.js' );\nvar blockedaccessormap9d = require( './9d_blocked_accessors.js' );\nvar blockedaccessormap10d = require( './10d_blocked_accessors.js' );\nvar blockedmap2d = require( './2d_blocked.js' );\nvar blockedmap3d = require( './3d_blocked.js' );\nvar blockedmap4d = require( './4d_blocked.js' );\nvar blockedmap5d = require( './5d_blocked.js' );\nvar blockedmap6d = require( './6d_blocked.js' );\nvar blockedmap7d = require( './7d_blocked.js' );\nvar blockedmap8d = require( './8d_blocked.js' );\nvar blockedmap9d = require( './9d_blocked.js' );\nvar blockedmap10d = require( './10d_blocked.js' );\nvar accessormap0d = require( './0d_accessors.js' );\nvar accessormap1d = require( './1d_accessors.js' );\nvar accessormap2d = require( './2d_accessors.js' );\nvar accessormap3d = require( './3d_accessors.js' );\nvar accessormap4d = require( './4d_accessors.js' );\nvar accessormap5d = require( './5d_accessors.js' );\nvar accessormap6d = require( './6d_accessors.js' );\nvar accessormap7d = require( './7d_accessors.js' );\nvar accessormap8d = require( './8d_accessors.js' );\nvar accessormap9d = require( './9d_accessors.js' );\nvar accessormap10d = require( './10d_accessors.js' );\nvar accessormapnd = require( './nd_accessors.js' );\nvar map0d = require( './0d.js' );\nvar map1d = require( './1d.js' );\nvar map2d = require( './2d.js' );\nvar map3d = require( './3d.js' );\nvar map4d = require( './4d.js' );\nvar map5d = require( './5d.js' );\nvar map6d = require( './6d.js' );\nvar map7d = require( './7d.js' );\nvar map8d = require( './8d.js' );\nvar map9d = require( './9d.js' );\nvar map10d = require( './10d.js' );\nvar mapnd = require( './nd.js' );\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar xmmv;\n\tvar ymmv;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ns;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tns = 0; // number of singleton dimensions\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\n\t\t// Check whether the current dimension is a singleton dimension...\n\t\tif ( d === 1 ) {\n\t\t\tns += 1;\n\t\t}\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays...\n\tif ( ns === ndims-1 ) {\n\t\t// Get the index of the non-singleton dimension...\n\t\tfor ( i = 0; i < ndims; i++ ) {\n\t\t\tif ( shx[ i ] !== 1 ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tx.shape = [ shx[i] ];\n\t\ty.shape = x.shape;\n\t\tx.strides = [ sx[i] ];\n\t\ty.strides = [ sy[i] ];\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t}\n\n\tiox = iterationOrder( sx ); // +/-1\n\tioy = iterationOrder( sy ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine the minimum and maximum linear indices which are accessible by the array views:\n\t\txmmv = minmaxViewBufferIndex( shx, sx, x.offset );\n\t\tymmv = minmaxViewBufferIndex( shy, sy, y.offset );\n\n\t\t// Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays...\n\t\tif ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) {\n\t\t\t// Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values...\n\t\t\tif ( iox === 1 ) {\n\t\t\t\tox = xmmv[ 0 ];\n\t\t\t} else {\n\t\t\t\tox = xmmv[ 1 ];\n\t\t\t}\n\t\t\tif ( ioy === 1 ) {\n\t\t\t\toy = ymmv[ 0 ];\n\t\t\t} else {\n\t\t\t\toy = ymmv[ 1 ];\n\t\t\t}\n\t\t\tx.shape = [ len ];\n\t\t\ty.shape = x.shape;\n\t\t\tx.strides = [ iox ];\n\t\t\ty.strides = [ ioy ];\n\t\t\tx.offset = ox;\n\t\t\ty.offset = oy;\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality...\n\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration...\n\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray.\n*\n* @module @stdlib/ndarray-base-map\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var map = require( '@stdlib/ndarray-base-map' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\n\n// MODULES //\n\nvar main = require( './main.js' );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "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", - "names": ["require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "get", "set", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "get", "set", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "set", "get", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_accessors", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d_accessors", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "get", "set", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd_accessors", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "get", "set", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_d", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_main", "__commonJSMin", "exports", "module", "iterationOrder", "minmaxViewBufferIndex", "ndarray2object", "blockedaccessormap2d", "blockedaccessormap3d", "blockedaccessormap4d", "blockedaccessormap5d", "blockedaccessormap6d", "blockedaccessormap7d", "blockedaccessormap8d", "blockedaccessormap9d", "blockedaccessormap10d", "blockedmap2d", "blockedmap3d", "blockedmap4d", "blockedmap5d", "blockedmap6d", "blockedmap7d", "blockedmap8d", "blockedmap9d", "blockedmap10d", "accessormap0d", "accessormap1d", "accessormap2d", "accessormap3d", "accessormap4d", "accessormap5d", "accessormap6d", "accessormap7d", "accessormap8d", "accessormap9d", "accessormap10d", "accessormapnd", "map0d", "map1d", "map2d", "map3d", "map4d", "map5d", "map6d", "map7d", "map8d", "map9d", "map10d", "mapnd", "MAP", "ACCESSOR_MAP", "BLOCKED_MAP", "BLOCKED_ACCESSOR_MAP", "MAX_DIMS", "map", "arrays", "fcn", "thisArg", "ndims", "xmmv", "ymmv", "shx", "shy", "iox", "ioy", "len", "sx", "sy", "ox", "oy", "ns", "x", "y", "i", "d", "main"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index be30da1..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,78 +0,0 @@ - -{{alias}}( arrays, fcn[, thisArg] ) - Applies a callback function to elements in an input ndarray and assigns - results to elements in an output ndarray. - - Each provided "ndarray" should be an object with following properties: - - - dtype: data type. - - data: data buffer. - - shape: dimensions. - - strides: stride lengths. - - offset: index offset. - - order: specifies whether an ndarray is row-major (C-style) or column-major - (Fortran-style). - - The callback function is provided the following arguments: - - - value: current array element. - - indices: current array element indices. - - arr: the input ndarray. - - Parameters - ---------- - arrays: ArrayLikeObject - Array-like object containing one input ndarray and one output ndarray. - - fcn: Function - Callback function. - - thisArg: any (optional) - Callback function execution context. - - Examples - -------- - // Define ndarray data and meta data... - > var xbuf = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ybuf = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] ); - > var dtype = 'float64'; - > var shape = [ 2, 2 ]; - > var sx = [ 2, 1 ]; - > var sy = [ 2, 1 ]; - > var ox = 0; - > var oy = 0; - > var order = 'row-major'; - - // Define a callback function: - > function f( v ) { return v*10.0; }; - - // Using ndarrays... - > var x = {{alias:@stdlib/ndarray/ctor}}( dtype, xbuf, shape, sx, ox, order ); - > var y = {{alias:@stdlib/ndarray/ctor}}( dtype, ybuf, shape, sy, oy, order ); - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - // Using minimal ndarray-like objects... - > x = { - ... 'dtype': dtype, - ... 'data': xbuf, - ... 'shape': shape, - ... 'strides': sx, - ... 'offset': ox, - ... 'order': order - ... }; - > y = { - ... 'dtype': dtype, - ... 'data': ybuf, - ... 'shape': shape, - ... 'strides': sy, - ... 'offset': oy, - ... 'order': order - ... }; - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - See Also - -------- diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 320d548..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/// - -import { ndarray } from '@stdlib/types/ndarray'; -import map = require( './index' ); - -/** -* Mock function to create an ndarray-like object. -* -* @returns ndarray-like object -*/ -function array(): ndarray { - const obj: ndarray = { - 'byteLength': 80, - 'BYTES_PER_ELEMENT': 8, - 'data': new Float64Array( 10 ), - 'dtype': 'float64', - 'flags': { - 'ROW_MAJOR_CONTIGUOUS': true, - 'COLUMN_MAJOR_CONTIGUOUS': false - }, - 'length': 10, - 'ndims': 1, - 'offset': 0, - 'order': 'row-major', - 'shape': [ 10 ], - 'strides': [ 1 ], - 'get': (): number => 0, - 'set': (): ndarray => obj - }; - return obj; -} - -/** -* Evaluates the identity function. -* -* @param x - input value -* @returns input value -*/ -function identity( x: number ): number { - return x; -} - -// TESTS // - -// The function returns `undefined`... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, identity ); // $ExpectType void - map( arrays, identity, {} ); // $ExpectType void -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object containing ndarray-like objects... -{ - map( 5, identity ); // $ExpectError - map( true, identity ); // $ExpectError - map( false, identity ); // $ExpectError - map( null, identity ); // $ExpectError - map( undefined, identity ); // $ExpectError - map( {}, identity ); // $ExpectError - map( [ 1 ], identity ); // $ExpectError - map( ( x: number ): number => x, identity ); // $ExpectError - - map( 5, identity, {} ); // $ExpectError - map( true, identity, {} ); // $ExpectError - map( false, identity, {} ); // $ExpectError - map( null, identity, {} ); // $ExpectError - map( undefined, identity, {} ); // $ExpectError - map( {}, identity, {} ); // $ExpectError - map( [ 1 ], identity, {} ); // $ExpectError - map( ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a callback function... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, '10' ); // $ExpectError - map( arrays, 5 ); // $ExpectError - map( arrays, true ); // $ExpectError - map( arrays, false ); // $ExpectError - map( arrays, null ); // $ExpectError - map( arrays, undefined ); // $ExpectError - map( arrays, [] ); // $ExpectError - map( arrays, {} ); // $ExpectError - - map( arrays, '10', {} ); // $ExpectError - map( arrays, 5, {} ); // $ExpectError - map( arrays, true, {} ); // $ExpectError - map( arrays, false, {} ); // $ExpectError - map( arrays, null, {} ); // $ExpectError - map( arrays, undefined, {} ); // $ExpectError - map( arrays, [], {} ); // $ExpectError - map( arrays, {}, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map(); // $ExpectError - map( arrays ); // $ExpectError{ - map( arrays, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index d89ee00..0000000 --- a/examples/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var ndarray2array = require( '@stdlib/ndarray-base-to-array' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var map = require( './../lib' ); - -var N = 10; -var x = { - 'dtype': 'generic', - 'data': filledarrayBy( N, 'generic', discreteUniform( -100, 100 ) ), - 'shape': [ 5, 2 ], - 'strides': [ 2, 1 ], - 'offset': 0, - 'order': 'row-major' -}; -var y = { - 'dtype': 'generic', - 'data': filledarray( 0, N, 'generic' ), - 'shape': x.shape.slice(), - 'strides': shape2strides( x.shape, 'column-major' ), - 'offset': 0, - 'order': 'column-major' -}; - -map( [ x, y ], naryFunction( abs, 1 ) ); -console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); -console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 97% rename from docs/types/index.d.ts rename to index.d.ts index 78ac9b8..9dd6ef1 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -18,7 +18,7 @@ // TypeScript Version: 4.1 -/// +/// import { ArrayLike } from '@stdlib/types/array'; import { typedndarray } from '@stdlib/types/ndarray'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..d28007b --- /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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-minmax-view-buffer-index@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import m from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var y="throw";var v="throw";var j=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport minmaxViewBufferIndex from '@stdlib/ndarray-base-minmax-view-buffer-index';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar xmmv;\n\tvar ymmv;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ns;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tns = 0; // number of singleton dimensions\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\n\t\t// Check whether the current dimension is a singleton dimension...\n\t\tif ( d === 1 ) {\n\t\t\tns += 1;\n\t\t}\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays...\n\tif ( ns === ndims-1 ) {\n\t\t// Get the index of the non-singleton dimension...\n\t\tfor ( i = 0; i < ndims; i++ ) {\n\t\t\tif ( shx[ i ] !== 1 ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tx.shape = [ shx[i] ];\n\t\ty.shape = x.shape;\n\t\tx.strides = [ sx[i] ];\n\t\ty.strides = [ sy[i] ];\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t}\n\n\tiox = iterationOrder( sx ); // +/-1\n\tioy = iterationOrder( sy ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine the minimum and maximum linear indices which are accessible by the array views:\n\t\txmmv = minmaxViewBufferIndex( shx, sx, x.offset );\n\t\tymmv = minmaxViewBufferIndex( shy, sy, y.offset );\n\n\t\t// Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays...\n\t\tif ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) {\n\t\t\t// Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values...\n\t\t\tif ( iox === 1 ) {\n\t\t\t\tox = xmmv[ 0 ];\n\t\t\t} else {\n\t\t\t\tox = xmmv[ 1 ];\n\t\t\t}\n\t\t\tif ( ioy === 1 ) {\n\t\t\t\toy = ymmv[ 0 ];\n\t\t\t} else {\n\t\t\t\toy = ymmv[ 1 ];\n\t\t\t}\n\t\t\tx.shape = [ len ];\n\t\t\ty.shape = x.shape;\n\t\t\tx.strides = [ iox ];\n\t\t\ty.strides = [ ioy ];\n\t\t\tx.offset = ox;\n\t\t\ty.offset = oy;\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality...\n\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration...\n\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","xmmv","ymmv","shx","shy","iox","ioy","len","ns","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","minmaxViewBufferIndex","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/lib/0d.js b/lib/0d.js deleted file mode 100644 index f19e08f..0000000 --- a/lib/0d.js +++ /dev/null @@ -1,100 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ){ -* return z * 10.0; -* } -* -* // Create a data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0 ] ); -* var ybuf = new Float64Array( 1 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offset: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like object: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* } -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0 ] -*/ -function map0d( x, y, fcn, thisArg ) { - y.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref ); -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/0d_accessors.js b/lib/0d_accessors.js deleted file mode 100644 index 0ce37b7..0000000 --- a/lib/0d_accessors.js +++ /dev/null @@ -1,121 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var ybuf = new Complex64Array( 2 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 30.0 -* -* var im = imagf( v ); -* // returns 40.0 -*/ -function map0d( x, y, fcn, thisArg ) { - y.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/10d.js b/lib/10d.js deleted file mode 100644 index f81fea5..0000000 --- a/lib/10d.js +++ /dev/null @@ -1,280 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_accessors.js b/lib/10d_accessors.js deleted file mode 100644 index b80eca7..0000000 --- a/lib/10d_accessors.js +++ /dev/null @@ -1,305 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_blocked.js b/lib/10d_blocked.js deleted file mode 100644 index 05863d6..0000000 --- a/lib/10d_blocked.js +++ /dev/null @@ -1,389 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/10d_blocked_accessors.js b/lib/10d_blocked_accessors.js deleted file mode 100644 index af78894..0000000 --- a/lib/10d_blocked_accessors.js +++ /dev/null @@ -1,414 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/1d.js b/lib/1d.js deleted file mode 100644 index b5f0220..0000000 --- a/lib/1d.js +++ /dev/null @@ -1,129 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 2 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 40.0, 60.0, 80.0 ] -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/1d_accessors.js b/lib/1d_accessors.js deleted file mode 100644 index b98015f..0000000 --- a/lib/1d_accessors.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 1 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/2d.js b/lib/2d.js deleted file mode 100644 index ac7b2fe..0000000 --- a/lib/2d.js +++ /dev/null @@ -1,166 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_accessors.js b/lib/2d_accessors.js deleted file mode 100644 index 07fb9c6..0000000 --- a/lib/2d_accessors.js +++ /dev/null @@ -1,191 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_blocked.js b/lib/2d_blocked.js deleted file mode 100644 index 9803bb4..0000000 --- a/lib/2d_blocked.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/2d_blocked_accessors.js b/lib/2d_blocked_accessors.js deleted file mode 100644 index 08e5eb7..0000000 --- a/lib/2d_blocked_accessors.js +++ /dev/null @@ -1,220 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/3d.js b/lib/3d.js deleted file mode 100644 index dd42769..0000000 --- a/lib/3d.js +++ /dev/null @@ -1,180 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_accessors.js b/lib/3d_accessors.js deleted file mode 100644 index 0a2042c..0000000 --- a/lib/3d_accessors.js +++ /dev/null @@ -1,205 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 2, 1 ]; -* var sy = [ 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var get; - var set; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_blocked.js b/lib/3d_blocked.js deleted file mode 100644 index d15d04c..0000000 --- a/lib/3d_blocked.js +++ /dev/null @@ -1,221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/3d_blocked_accessors.js b/lib/3d_blocked_accessors.js deleted file mode 100644 index 551417b..0000000 --- a/lib/3d_blocked_accessors.js +++ /dev/null @@ -1,246 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 2, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/4d.js b/lib/4d.js deleted file mode 100644 index 0556d8e..0000000 --- a/lib/4d.js +++ /dev/null @@ -1,194 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_accessors.js b/lib/4d_accessors.js deleted file mode 100644 index 1067a7e..0000000 --- a/lib/4d_accessors.js +++ /dev/null @@ -1,219 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_blocked.js b/lib/4d_blocked.js deleted file mode 100644 index 2b62030..0000000 --- a/lib/4d_blocked.js +++ /dev/null @@ -1,245 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/4d_blocked_accessors.js b/lib/4d_blocked_accessors.js deleted file mode 100644 index fe56f55..0000000 --- a/lib/4d_blocked_accessors.js +++ /dev/null @@ -1,270 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/5d.js b/lib/5d.js deleted file mode 100644 index fb138a5..0000000 --- a/lib/5d.js +++ /dev/null @@ -1,208 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_accessors.js b/lib/5d_accessors.js deleted file mode 100644 index 495e033..0000000 --- a/lib/5d_accessors.js +++ /dev/null @@ -1,233 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_blocked.js b/lib/5d_blocked.js deleted file mode 100644 index 7162107..0000000 --- a/lib/5d_blocked.js +++ /dev/null @@ -1,269 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/5d_blocked_accessors.js b/lib/5d_blocked_accessors.js deleted file mode 100644 index 4a0a880..0000000 --- a/lib/5d_blocked_accessors.js +++ /dev/null @@ -1,294 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/6d.js b/lib/6d.js deleted file mode 100644 index 0389a6e..0000000 --- a/lib/6d.js +++ /dev/null @@ -1,224 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map6d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_accessors.js b/lib/6d_accessors.js deleted file mode 100644 index 0287a54..0000000 --- a/lib/6d_accessors.js +++ /dev/null @@ -1,249 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_blocked.js b/lib/6d_blocked.js deleted file mode 100644 index e850edb..0000000 --- a/lib/6d_blocked.js +++ /dev/null @@ -1,293 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/6d_blocked_accessors.js b/lib/6d_blocked_accessors.js deleted file mode 100644 index 1acf143..0000000 --- a/lib/6d_blocked_accessors.js +++ /dev/null @@ -1,318 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var set; - var get; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/7d.js b/lib/7d.js deleted file mode 100644 index f2c6603..0000000 --- a/lib/7d.js +++ /dev/null @@ -1,238 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_accessors.js b/lib/7d_accessors.js deleted file mode 100644 index e50b3bf..0000000 --- a/lib/7d_accessors.js +++ /dev/null @@ -1,263 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_blocked.js b/lib/7d_blocked.js deleted file mode 100644 index 1b6ce95..0000000 --- a/lib/7d_blocked.js +++ /dev/null @@ -1,317 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/7d_blocked_accessors.js b/lib/7d_blocked_accessors.js deleted file mode 100644 index 52537bc..0000000 --- a/lib/7d_blocked_accessors.js +++ /dev/null @@ -1,342 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/8d.js b/lib/8d.js deleted file mode 100644 index 641c2f9..0000000 --- a/lib/8d.js +++ /dev/null @@ -1,252 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_accessors.js b/lib/8d_accessors.js deleted file mode 100644 index 08c4970..0000000 --- a/lib/8d_accessors.js +++ /dev/null @@ -1,277 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_blocked.js b/lib/8d_blocked.js deleted file mode 100644 index a52ab49..0000000 --- a/lib/8d_blocked.js +++ /dev/null @@ -1,341 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/8d_blocked_accessors.js b/lib/8d_blocked_accessors.js deleted file mode 100644 index e40b718..0000000 --- a/lib/8d_blocked_accessors.js +++ /dev/null @@ -1,366 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/9d.js b/lib/9d.js deleted file mode 100644 index ff40cad..0000000 --- a/lib/9d.js +++ /dev/null @@ -1,266 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_accessors.js b/lib/9d_accessors.js deleted file mode 100644 index ce30b37..0000000 --- a/lib/9d_accessors.js +++ /dev/null @@ -1,291 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_blocked.js b/lib/9d_blocked.js deleted file mode 100644 index 4440ee8..0000000 --- a/lib/9d_blocked.js +++ /dev/null @@ -1,365 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/9d_blocked_accessors.js b/lib/9d_blocked_accessors.js deleted file mode 100644 index 5998505..0000000 --- a/lib/9d_blocked_accessors.js +++ /dev/null @@ -1,390 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 80cf80e..0000000 --- a/lib/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray. -* -* @module @stdlib/ndarray-base-map -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var map = require( '@stdlib/ndarray-base-map' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 551b589..0000000 --- a/lib/main.js +++ /dev/null @@ -1,342 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var iterationOrder = require( '@stdlib/ndarray-base-iteration-order' ); -var minmaxViewBufferIndex = require( '@stdlib/ndarray-base-minmax-view-buffer-index' ); -var ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' ); -var blockedaccessormap2d = require( './2d_blocked_accessors.js' ); -var blockedaccessormap3d = require( './3d_blocked_accessors.js' ); -var blockedaccessormap4d = require( './4d_blocked_accessors.js' ); -var blockedaccessormap5d = require( './5d_blocked_accessors.js' ); -var blockedaccessormap6d = require( './6d_blocked_accessors.js' ); -var blockedaccessormap7d = require( './7d_blocked_accessors.js' ); -var blockedaccessormap8d = require( './8d_blocked_accessors.js' ); -var blockedaccessormap9d = require( './9d_blocked_accessors.js' ); -var blockedaccessormap10d = require( './10d_blocked_accessors.js' ); -var blockedmap2d = require( './2d_blocked.js' ); -var blockedmap3d = require( './3d_blocked.js' ); -var blockedmap4d = require( './4d_blocked.js' ); -var blockedmap5d = require( './5d_blocked.js' ); -var blockedmap6d = require( './6d_blocked.js' ); -var blockedmap7d = require( './7d_blocked.js' ); -var blockedmap8d = require( './8d_blocked.js' ); -var blockedmap9d = require( './9d_blocked.js' ); -var blockedmap10d = require( './10d_blocked.js' ); -var accessormap0d = require( './0d_accessors.js' ); -var accessormap1d = require( './1d_accessors.js' ); -var accessormap2d = require( './2d_accessors.js' ); -var accessormap3d = require( './3d_accessors.js' ); -var accessormap4d = require( './4d_accessors.js' ); -var accessormap5d = require( './5d_accessors.js' ); -var accessormap6d = require( './6d_accessors.js' ); -var accessormap7d = require( './7d_accessors.js' ); -var accessormap8d = require( './8d_accessors.js' ); -var accessormap9d = require( './9d_accessors.js' ); -var accessormap10d = require( './10d_accessors.js' ); -var accessormapnd = require( './nd_accessors.js' ); -var map0d = require( './0d.js' ); -var map1d = require( './1d.js' ); -var map2d = require( './2d.js' ); -var map3d = require( './3d.js' ); -var map4d = require( './4d.js' ); -var map5d = require( './5d.js' ); -var map6d = require( './6d.js' ); -var map7d = require( './7d.js' ); -var map8d = require( './8d.js' ); -var map9d = require( './9d.js' ); -var map10d = require( './10d.js' ); -var mapnd = require( './nd.js' ); - - -// VARIABLES // - -var MAP = [ - map0d, - map1d, - map2d, - map3d, - map4d, - map5d, - map6d, - map7d, - map8d, - map9d, - map10d -]; -var ACCESSOR_MAP = [ - accessormap0d, - accessormap1d, - accessormap2d, - accessormap3d, - accessormap4d, - accessormap5d, - accessormap6d, - accessormap7d, - accessormap8d, - accessormap9d, - accessormap10d -]; -var BLOCKED_MAP = [ - blockedmap2d, // 0 - blockedmap3d, - blockedmap4d, - blockedmap5d, - blockedmap6d, - blockedmap7d, - blockedmap8d, - blockedmap9d, - blockedmap10d // 8 -]; -var BLOCKED_ACCESSOR_MAP = [ - blockedaccessormap2d, // 0 - blockedaccessormap3d, - blockedaccessormap4d, - blockedaccessormap5d, - blockedaccessormap6d, - blockedaccessormap7d, - blockedaccessormap8d, - blockedaccessormap9d, - blockedaccessormap10d // 8 -]; -var MAX_DIMS = MAP.length -1; - - -// MAIN // - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* ## Notes -* -* - Each provided ndarray should be an `object` with the following properties: -* -* - **dtype**: data type. -* - **data**: data buffer. -* - **shape**: dimensions. -* - **strides**: stride lengths. -* - **offset**: index offset. -* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style). -* -* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array -* @param {Callback} fcn - callback function -* @param {*} [thisArg] - callback execution context -* @throws {Error} arrays must have the same number of dimensions -* @throws {Error} arrays must have the same shape -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map( arrays, fcn, thisArg ) { - var ndims; - var xmmv; - var ymmv; - var shx; - var shy; - var iox; - var ioy; - var len; - var sx; - var sy; - var ox; - var oy; - var ns; - var x; - var y; - var i; - var d; - - // Unpack the ndarrays and standardize ndarray meta data: - x = ndarray2object( arrays[ 0 ] ); - y = ndarray2object( arrays[ 1 ] ); - - // Verify that the input and output arrays have the same number of dimensions... - shx = x.shape; - shy = y.shape; - ndims = shx.length; - if ( ndims !== shy.length ) { - throw new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' ); - } - // Determine whether we can avoid iteration altogether... - if ( ndims === 0 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Verify that the input and output arrays have the same dimensions... - len = 1; // number of elements - ns = 0; // number of singleton dimensions - for ( i = 0; i < ndims; i++ ) { - d = shx[ i ]; - if ( d !== shy[ i ] ) { - throw new Error( 'invalid arguments. Array must have the same shape.' ); - } - // Note that, if one of the dimensions is `0`, the length will be `0`... - len *= d; - - // Check whether the current dimension is a singleton dimension... - if ( d === 1 ) { - ns += 1; - } - } - // Check whether we were provided empty ndarrays... - if ( len === 0 ) { - return; - } - // Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays... - if ( ndims === 1 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - - sx = x.strides; - sy = y.strides; - - // Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays... - if ( ns === ndims-1 ) { - // Get the index of the non-singleton dimension... - for ( i = 0; i < ndims; i++ ) { - if ( shx[ i ] !== 1 ) { - break; - } - } - x.shape = [ shx[i] ]; - y.shape = x.shape; - x.strides = [ sx[i] ]; - y.strides = [ sy[i] ]; - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg ); - } - return MAP[ 1 ]( x, y, fcn, thisArg ); - } - - iox = iterationOrder( sx ); // +/-1 - ioy = iterationOrder( sy ); // +/-1 - - // Determine whether we can avoid blocked iteration... - if ( iox !== 0 && ioy !== 0 && iox === ioy ) { - // Determine the minimum and maximum linear indices which are accessible by the array views: - xmmv = minmaxViewBufferIndex( shx, sx, x.offset ); - ymmv = minmaxViewBufferIndex( shy, sy, y.offset ); - - // Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays... - if ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) { - // Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values... - if ( iox === 1 ) { - ox = xmmv[ 0 ]; - } else { - ox = xmmv[ 1 ]; - } - if ( ioy === 1 ) { - oy = ymmv[ 0 ]; - } else { - oy = ymmv[ 1 ]; - } - x.shape = [ len ]; - y.shape = x.shape; - x.strides = [ iox ]; - y.strides = [ ioy ]; - x.offset = ox; - y.offset = oy; - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg ); - } - return MAP[ 1 ]( x, y, fcn, thisArg ); - } - // At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality... - - // Determine whether we can use simple nested loops... - if ( ndims <= MAX_DIMS ) { - // So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration... - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Fall-through to blocked iteration... - } - // At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration... - - // Determine whether we can perform blocked iteration... - if ( ndims <= MAX_DIMS ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - return BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - // Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)... - if ( x.accessorProtocol || y.accessorProtocol ) { - return accessormapnd( x, y, fcn, thisArg ); - } - mapnd( x, y, fcn, thisArg ); -} - - -// EXPORTS // - -module.exports = map; diff --git a/lib/nd.js b/lib/nd.js deleted file mode 100644 index 379d56e..0000000 --- a/lib/nd.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/lib/nd_accessors.js b/lib/nd_accessors.js deleted file mode 100644 index a28998b..0000000 --- a/lib/nd_accessors.js +++ /dev/null @@ -1,179 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var get; - var set; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/package.json b/package.json index e6048e5..c1b688b 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Apply a callback to elements in an input ndarray and assign results to elements in an output ndarray.", "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,70 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-reverse": "^0.2.2", - "@stdlib/array-base-take-indexed": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/ndarray-base-ind2sub": "^0.2.2", - "@stdlib/ndarray-base-iteration-order": "^0.2.2", - "@stdlib/ndarray-base-minmax-view-buffer-index": "^0.2.2", - "@stdlib/ndarray-base-ndarraylike2object": "^0.2.2", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", - "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.1", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-complex128": "^0.3.0", - "@stdlib/array-filled": "^0.2.1", - "@stdlib/array-filled-by": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/array-ones": "^0.2.1", - "@stdlib/array-typed-complex-ctors": "^0.2.2", - "@stdlib/array-zeros": "^0.2.2", - "@stdlib/assert-is-same-complex128array": "^0.2.2", - "@stdlib/assert-is-same-float64array": "^0.2.2", - "@stdlib/blas-ext-base-dfill": "^0.2.2", - "@stdlib/blas-ext-base-gfill": "^0.2.1", - "@stdlib/complex-float64-ctor": "^0.0.3", - "@stdlib/complex-float64-imag": "^0.1.1", - "@stdlib/complex-float64-real": "^0.1.1", - "@stdlib/math-base-assert-is-nan": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/math-base-special-cbrt": "^0.2.2", - "@stdlib/math-base-special-floor": "^0.2.3", - "@stdlib/math-base-special-identity": "^0.2.2", - "@stdlib/math-base-special-pow": "^0.3.0", - "@stdlib/math-base-special-sqrt": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-strides2offset": "^0.2.2", - "@stdlib/ndarray-base-to-array": "^0.2.1", - "@stdlib/ndarray-ctor": "^0.2.2", - "@stdlib/ndarray-from-scalar": "^0.2.1", - "@stdlib/random-base-discrete-uniform": "^0.2.1", - "@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", "base", @@ -113,9 +26,8 @@ "transform", "for-each" ], - "__stdlib__": {}, "funding": { "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..37b95b3 --- /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.0d.js b/test/test.0d.js deleted file mode 100644 index 1648cc8..0000000 --- a/test/test.0d.js +++ /dev/null @@ -1,89 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var scalar2ndarray = require( '@stdlib/ndarray-from-scalar' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( 1.0, { - 'dtype': 'float64' - }); - y = scalar2ndarray( 0.0, { - 'dtype': 'float64' - }); - - map( [ x, y ], scale ); - - expected = new Float64Array( [ 10.0 ] ); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( new Complex128( 1.0, 1.0 ), { - 'dtype': 'complex128' - }); - y = scalar2ndarray( new Complex128( 0.0, 0.0 ), { - 'dtype': 'complex128' - }); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ 10.0, 10.0 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.10d.js b/test/test.10d.js deleted file mode 100644 index 74b3998..0000000 --- a/test/test.10d.js +++ /dev/null @@ -1,2667 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -1, -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.1d.js b/test/test.1d.js deleted file mode 100644 index 21e0604..0000000 --- a/test/test.1d.js +++ /dev/null @@ -1,134 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (empty array)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'complex128', ones( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - y = ndarray( 'complex128', zeros( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.2d.js b/test/test.2d.js deleted file mode 100644 index 3e94e94..0000000 --- a/test/test.2d.js +++ /dev/null @@ -1,1195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( x.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.3d.js b/test/test.3d.js deleted file mode 100644 index 07f7516..0000000 --- a/test/test.3d.js +++ /dev/null @@ -1,1331 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ bsize*8, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 2 ]; - st = [ -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ -bsize*8, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ -1, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 2 ]; - st = [ -1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.4d.js b/test/test.4d.js deleted file mode 100644 index 8864e09..0000000 --- a/test/test.4d.js +++ /dev/null @@ -1,1503 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ -2, -2, -1, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ bsize*8, bsize*4, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ bsize*8, bsize*4, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ -bsize*4, bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2 ]; - st = [ -bsize*4, bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ 2, 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ 2, 2, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 1, 2 ]; - st = [ 2, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1 ]; - st = [ 1, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ 2, 4, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*4 ]; - st = [ 2, 4, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.5d.js b/test/test.5d.js deleted file mode 100644 index 16f3119..0000000 --- a/test/test.5d.js +++ /dev/null @@ -1,1740 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -8, -4, -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ -2, 4, -bsize*8, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, 4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ -2, 4, -4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1 ]; - st = [ -2, 4, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, -4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ 2, 4, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.6d.js b/test/test.6d.js deleted file mode 100644 index 41fef40..0000000 --- a/test/test.6d.js +++ /dev/null @@ -1,1892 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, -16, 8, -4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, -4, -4, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.7d.js b/test/test.7d.js deleted file mode 100644 index 8a3a7fe..0000000 --- a/test/test.7d.js +++ /dev/null @@ -1,2099 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, 8, -4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 1, 2 ]; - st = [ bsize*16, -8, 8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -8, -8, -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, -8, 4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ bsize*16, -8, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*16, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 2, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, bsize*8, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 2, 1 ]; - st = [ 2, -4, bsize*8, bsize*8, -bsize*16, bsize*16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 1, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, -2, 4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, -bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.8d.js b/test/test.8d.js deleted file mode 100644 index 2dc6333..0000000 --- a/test/test.8d.js +++ /dev/null @@ -1,2221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, -16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, 16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.9d.js b/test/test.9d.js deleted file mode 100644 index 2a38c2e..0000000 --- a/test/test.9d.js +++ /dev/null @@ -1,2447 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 5512e2c..0000000 --- a/test/test.js +++ /dev/null @@ -1,139 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same number of dimensions', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2 ] ], - [ [ 2, 2 ], [ 2, 2, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ], - [ [ 2, 2, 1, 2 ], [ 2, 1, 2 ] ], - [ [ 1, 1, 4, 2, 2, 2 ], [ 10, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same shape', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2, 2 ] ], - [ [ 3, 3 ], [ 2, 2 ] ], - [ [ 5, 5, 5 ], [ 5, 5, 4 ] ], - [ [ 1, 1, 1 ], [ 2, 2, 2 ] ], - [ [ 1, 4, 1, 2, 2 ], [ 3, 8 ] ], - [ [ 10, 2, 1 ], [ 1, 2, 10 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); diff --git a/test/test.nd.js b/test/test.nd.js deleted file mode 100644 index 9e4b18d..0000000 --- a/test/test.nd.js +++ /dev/null @@ -1,822 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset(sh, st); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); From b2d9c6cf1c61762e5176f7b080031198cfb5192e Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 14 Dec 2024 03:40:14 +0000 Subject: [PATCH 12/32] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0537c16..d0cff18 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,8 @@ "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3" + "@stdlib/types": "^0.4.3", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-complex128": "^0.3.0", @@ -116,4 +117,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 1f002573a94ce6323dce3a28d0e4d8e8ce2586c8 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 14 Dec 2024 03:42:10 +0000 Subject: [PATCH 13/32] Remove files --- index.d.ts | 117 -- index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 4964 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 9dd6ef1..0000000 --- a/index.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { ArrayLike } from '@stdlib/types/array'; -import { typedndarray } from '@stdlib/types/ndarray'; - -/** -* Callback invoked for each ndarray element. -* -* @returns output value -*/ -type Nullary = ( this: V ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @returns output value -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @returns output value -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Ternary = ( this: V, value: T, indices: Array, arr: typedndarray ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Callback = Nullary | Unary | Binary | Ternary; - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* @param arrays - array-like object containing one input ndarray and one output ndarray -* @param fcn - callback function -* @param thisArg - callback function execution context -* @throws arrays must have the same number of dimensions -* @throws arrays must have the same shape -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var ndarray = require( '@stdlib/ndarray-ctor' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarrays: -* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' ); -* var y = ndarray( 'float64', ybuf, shape, sy, oy, 'row-major' ); -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -declare function map( arrays: ArrayLike>, fcn: Callback, thisArg?: ThisParameterType> ): void; - - -// EXPORTS // - -export = map; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index d28007b..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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-minmax-view-buffer-index@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import m from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var y="throw";var v="throw";var j=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport minmaxViewBufferIndex from '@stdlib/ndarray-base-minmax-view-buffer-index';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar xmmv;\n\tvar ymmv;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ns;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tns = 0; // number of singleton dimensions\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\n\t\t// Check whether the current dimension is a singleton dimension...\n\t\tif ( d === 1 ) {\n\t\t\tns += 1;\n\t\t}\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Determine whether the ndarray has only **one** non-singleton dimension (e.g., ndims=4, shape=[10,1,1,1]) so that we can treat the ndarrays as being equivalent to one-dimensional strided arrays...\n\tif ( ns === ndims-1 ) {\n\t\t// Get the index of the non-singleton dimension...\n\t\tfor ( i = 0; i < ndims; i++ ) {\n\t\t\tif ( shx[ i ] !== 1 ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tx.shape = [ shx[i] ];\n\t\ty.shape = x.shape;\n\t\tx.strides = [ sx[i] ];\n\t\ty.strides = [ sy[i] ];\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t}\n\n\tiox = iterationOrder( sx ); // +/-1\n\tioy = iterationOrder( sy ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine the minimum and maximum linear indices which are accessible by the array views:\n\t\txmmv = minmaxViewBufferIndex( shx, sx, x.offset );\n\t\tymmv = minmaxViewBufferIndex( shy, sy, y.offset );\n\n\t\t// Determine whether we can ignore shape (and strides) and treat the ndarrays as linear one-dimensional strided arrays...\n\t\tif ( len === ( xmmv[1]-xmmv[0]+1 ) && len === ( ymmv[1]-ymmv[0]+1 ) ) {\n\t\t\t// Note: the above is equivalent to @stdlib/ndarray/base/assert/is-contiguous, but in-lined so we can retain computed values...\n\t\t\tif ( iox === 1 ) {\n\t\t\t\tox = xmmv[ 0 ];\n\t\t\t} else {\n\t\t\t\tox = xmmv[ 1 ];\n\t\t\t}\n\t\t\tif ( ioy === 1 ) {\n\t\t\t\toy = ymmv[ 0 ];\n\t\t\t} else {\n\t\t\t\toy = ymmv[ 1 ];\n\t\t\t}\n\t\t\tx.shape = [ len ];\n\t\t\ty.shape = x.shape;\n\t\t\tx.strides = [ iox ];\n\t\t\ty.strides = [ ioy ];\n\t\t\tx.offset = ox;\n\t\t\ty.offset = oy;\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ 1 ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// At least one ndarray is non-contiguous, so we cannot directly use one-dimensional array functionality...\n\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// At this point, we're either dealing with non-contiguous n-dimensional arrays, high dimensional n-dimensional arrays, and/or arrays having differing memory layouts, so our only hope is that we can still perform blocked iteration...\n\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","xmmv","ymmv","shx","shy","iox","ioy","len","ns","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","minmaxViewBufferIndex","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 37b95b3..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 901e35bd0cb39231cbbe179808958370a42a1dd4 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Sat, 14 Dec 2024 03:42:57 +0000 Subject: [PATCH 14/32] 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 - .github/workflows/test_published_package.yml | 105 - .gitignore | 190 - .npmignore | 229 - .npmrc | 31 - CHANGELOG.md | 64 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 51 +- SECURITY.md | 5 - .../benchmark.10d_blocked_columnmajor.js | 148 - benchmark/benchmark.10d_blocked_rowmajor.js | 148 - benchmark/benchmark.10d_columnmajor.js | 148 - benchmark/benchmark.10d_rowmajor.js | 148 - benchmark/benchmark.11d_columnmajor.js | 148 - benchmark/benchmark.11d_rowmajor.js | 148 - benchmark/benchmark.1d_columnmajor.js | 137 - benchmark/benchmark.1d_rowmajor.js | 137 - benchmark/benchmark.2d_blocked_columnmajor.js | 149 - benchmark/benchmark.2d_blocked_rowmajor.js | 149 - benchmark/benchmark.2d_columnmajor.js | 149 - benchmark/benchmark.2d_rowmajor.js | 150 - benchmark/benchmark.2d_rowmajor_accessors.js | 177 - ...benchmark.2d_rowmajor_accessors_complex.js | 184 - benchmark/benchmark.3d_blocked_columnmajor.js | 149 - benchmark/benchmark.3d_blocked_rowmajor.js | 149 - benchmark/benchmark.3d_columnmajor.js | 149 - benchmark/benchmark.3d_rowmajor.js | 149 - benchmark/benchmark.4d_blocked_columnmajor.js | 148 - benchmark/benchmark.4d_blocked_rowmajor.js | 148 - benchmark/benchmark.4d_columnmajor.js | 148 - benchmark/benchmark.4d_rowmajor.js | 148 - benchmark/benchmark.5d_blocked_columnmajor.js | 148 - benchmark/benchmark.5d_blocked_rowmajor.js | 148 - benchmark/benchmark.5d_columnmajor.js | 148 - benchmark/benchmark.5d_rowmajor.js | 148 - benchmark/benchmark.6d_blocked_columnmajor.js | 148 - benchmark/benchmark.6d_blocked_rowmajor.js | 148 - benchmark/benchmark.6d_columnmajor.js | 148 - benchmark/benchmark.6d_rowmajor.js | 148 - benchmark/benchmark.7d_blocked_columnmajor.js | 148 - benchmark/benchmark.7d_blocked_rowmajor.js | 148 - benchmark/benchmark.7d_columnmajor.js | 148 - benchmark/benchmark.7d_rowmajor.js | 148 - benchmark/benchmark.8d_blocked_columnmajor.js | 148 - benchmark/benchmark.8d_blocked_rowmajor.js | 148 - benchmark/benchmark.8d_columnmajor.js | 148 - benchmark/benchmark.8d_rowmajor.js | 148 - benchmark/benchmark.9d_blocked_columnmajor.js | 148 - benchmark/benchmark.9d_blocked_rowmajor.js | 148 - benchmark/benchmark.9d_columnmajor.js | 148 - benchmark/benchmark.9d_rowmajor.js | 148 - branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 19 - dist/index.js.map | 7 - docs/repl.txt | 78 - docs/types/test.ts | 128 - examples/index.js | 50 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/0d.js | 100 - lib/0d_accessors.js | 121 - lib/10d.js | 280 - lib/10d_accessors.js | 305 -- lib/10d_blocked.js | 389 -- lib/10d_blocked_accessors.js | 414 -- lib/1d.js | 129 - lib/1d_accessors.js | 154 - lib/2d.js | 166 - lib/2d_accessors.js | 191 - lib/2d_blocked.js | 195 - lib/2d_blocked_accessors.js | 220 - lib/3d.js | 180 - lib/3d_accessors.js | 205 - lib/3d_blocked.js | 221 - lib/3d_blocked_accessors.js | 246 - lib/4d.js | 194 - lib/4d_accessors.js | 219 - lib/4d_blocked.js | 245 - lib/4d_blocked_accessors.js | 270 - lib/5d.js | 208 - lib/5d_accessors.js | 233 - lib/5d_blocked.js | 269 - lib/5d_blocked_accessors.js | 294 - lib/6d.js | 224 - lib/6d_accessors.js | 249 - lib/6d_blocked.js | 293 - lib/6d_blocked_accessors.js | 318 -- lib/7d.js | 238 - lib/7d_accessors.js | 263 - lib/7d_blocked.js | 317 -- lib/7d_blocked_accessors.js | 342 -- lib/8d.js | 252 - lib/8d_accessors.js | 277 - lib/8d_blocked.js | 341 -- lib/8d_blocked_accessors.js | 366 -- lib/9d.js | 266 - lib/9d_accessors.js | 291 - lib/9d_blocked.js | 365 -- lib/9d_blocked_accessors.js | 390 -- lib/index.js | 81 - lib/main.js | 275 - lib/nd.js | 154 - lib/nd_accessors.js | 179 - package.json | 93 +- stats.html | 4842 +++++++++++++++++ test/dist/test.js | 33 - test/test.0d.js | 89 - test/test.10d.js | 2667 --------- test/test.1d.js | 134 - test/test.2d.js | 1195 ---- test/test.3d.js | 1331 ----- test/test.4d.js | 1503 ----- test/test.5d.js | 1740 ------ test/test.6d.js | 1892 ------- test/test.7d.js | 2099 ------- test/test.8d.js | 2221 -------- test/test.9d.js | 2447 --------- test/test.js | 139 - test/test.nd.js | 822 --- 138 files changed, 4872 insertions(+), 39320 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 .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.10d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.10d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.10d_columnmajor.js delete mode 100644 benchmark/benchmark.10d_rowmajor.js delete mode 100644 benchmark/benchmark.11d_columnmajor.js delete mode 100644 benchmark/benchmark.11d_rowmajor.js delete mode 100644 benchmark/benchmark.1d_columnmajor.js delete mode 100644 benchmark/benchmark.1d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.2d_columnmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors_complex.js delete mode 100644 benchmark/benchmark.3d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.3d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.3d_columnmajor.js delete mode 100644 benchmark/benchmark.3d_rowmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.4d_columnmajor.js delete mode 100644 benchmark/benchmark.4d_rowmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.5d_columnmajor.js delete mode 100644 benchmark/benchmark.5d_rowmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.6d_columnmajor.js delete mode 100644 benchmark/benchmark.6d_rowmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.7d_columnmajor.js delete mode 100644 benchmark/benchmark.7d_rowmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.8d_columnmajor.js delete mode 100644 benchmark/benchmark.8d_rowmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.9d_columnmajor.js delete mode 100644 benchmark/benchmark.9d_rowmajor.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 (97%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/0d.js delete mode 100644 lib/0d_accessors.js delete mode 100644 lib/10d.js delete mode 100644 lib/10d_accessors.js delete mode 100644 lib/10d_blocked.js delete mode 100644 lib/10d_blocked_accessors.js delete mode 100644 lib/1d.js delete mode 100644 lib/1d_accessors.js delete mode 100644 lib/2d.js delete mode 100644 lib/2d_accessors.js delete mode 100644 lib/2d_blocked.js delete mode 100644 lib/2d_blocked_accessors.js delete mode 100644 lib/3d.js delete mode 100644 lib/3d_accessors.js delete mode 100644 lib/3d_blocked.js delete mode 100644 lib/3d_blocked_accessors.js delete mode 100644 lib/4d.js delete mode 100644 lib/4d_accessors.js delete mode 100644 lib/4d_blocked.js delete mode 100644 lib/4d_blocked_accessors.js delete mode 100644 lib/5d.js delete mode 100644 lib/5d_accessors.js delete mode 100644 lib/5d_blocked.js delete mode 100644 lib/5d_blocked_accessors.js delete mode 100644 lib/6d.js delete mode 100644 lib/6d_accessors.js delete mode 100644 lib/6d_blocked.js delete mode 100644 lib/6d_blocked_accessors.js delete mode 100644 lib/7d.js delete mode 100644 lib/7d_accessors.js delete mode 100644 lib/7d_blocked.js delete mode 100644 lib/7d_blocked_accessors.js delete mode 100644 lib/8d.js delete mode 100644 lib/8d_accessors.js delete mode 100644 lib/8d_blocked.js delete mode 100644 lib/8d_blocked_accessors.js delete mode 100644 lib/9d.js delete mode 100644 lib/9d_accessors.js delete mode 100644 lib/9d_blocked.js delete mode 100644 lib/9d_blocked_accessors.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js delete mode 100644 lib/nd.js delete mode 100644 lib/nd_accessors.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.0d.js delete mode 100644 test/test.10d.js delete mode 100644 test/test.1d.js delete mode 100644 test/test.2d.js delete mode 100644 test/test.3d.js delete mode 100644 test/test.4d.js delete mode 100644 test/test.5d.js delete mode 100644 test/test.6d.js delete mode 100644 test/test.7d.js delete mode 100644 test/test.8d.js delete mode 100644 test/test.9d.js delete mode 100644 test/test.js delete mode 100644 test/test.nd.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 00c9c4d..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/ndarray/base/map) 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 0696b91..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/ndarray/base/map) 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 1c89592..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: '29 17 * * 1' - - # 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 + + ```
@@ -214,7 +205,7 @@ console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); ## 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.10d_blocked_columnmajor.js b/benchmark/benchmark.10d_blocked_columnmajor.js deleted file mode 100644 index 05f9922..0000000 --- a/benchmark/benchmark.10d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_blocked_rowmajor.js b/benchmark/benchmark.10d_blocked_rowmajor.js deleted file mode 100644 index 19d212d..0000000 --- a/benchmark/benchmark.10d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_columnmajor.js b/benchmark/benchmark.10d_columnmajor.js deleted file mode 100644 index e74d522..0000000 --- a/benchmark/benchmark.10d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_rowmajor.js b/benchmark/benchmark.10d_rowmajor.js deleted file mode 100644 index e40298d..0000000 --- a/benchmark/benchmark.10d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_columnmajor.js b/benchmark/benchmark.11d_columnmajor.js deleted file mode 100644 index 4e0ed2b..0000000 --- a/benchmark/benchmark.11d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_rowmajor.js b/benchmark/benchmark.11d_rowmajor.js deleted file mode 100644 index febbfb1..0000000 --- a/benchmark/benchmark.11d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_columnmajor.js b/benchmark/benchmark.1d_columnmajor.js deleted file mode 100644 index 90b6a68..0000000 --- a/benchmark/benchmark.1d_columnmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_rowmajor.js b/benchmark/benchmark.1d_rowmajor.js deleted file mode 100644 index 4b8aef0..0000000 --- a/benchmark/benchmark.1d_rowmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_columnmajor.js b/benchmark/benchmark.2d_blocked_columnmajor.js deleted file mode 100644 index 7756089..0000000 --- a/benchmark/benchmark.2d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_rowmajor.js b/benchmark/benchmark.2d_blocked_rowmajor.js deleted file mode 100644 index 211ca54..0000000 --- a/benchmark/benchmark.2d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_columnmajor.js b/benchmark/benchmark.2d_columnmajor.js deleted file mode 100644 index 619a510..0000000 --- a/benchmark/benchmark.2d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor.js b/benchmark/benchmark.2d_rowmajor.js deleted file mode 100644 index 6144d5f..0000000 --- a/benchmark/benchmark.2d_rowmajor.js +++ /dev/null @@ -1,150 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors.js b/benchmark/benchmark.2d_rowmajor_accessors.js deleted file mode 100644 index 7ec19ae..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors.js +++ /dev/null @@ -1,177 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf[ idx ]; -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf[ idx ] = value; -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors_complex.js b/benchmark/benchmark.2d_rowmajor_accessors_complex.js deleted file mode 100644 index 83ca6f9..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors_complex.js +++ /dev/null @@ -1,184 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var ctors = require( '@stdlib/array-typed-complex-ctors' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'complex64' ]; -var order = 'row-major'; -var abtype = { - 'complex64': 'float32', - 'complex128': 'float64' -}; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf.get( idx ); -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf.set( value, idx ); -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var xbuf; - var ybuf; - var x; - var y; - - xbuf = filledarrayBy( len*2, abtype[ xtype ], discreteUniform( -100, 100 ) ); // eslint-disable-line max-len - ybuf = filledarray( 0.0, len*2, abtype[ ytype ] ); - x = { - 'dtype': xtype, - 'data': new ( ctors( xtype ) )( xbuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': new ( ctors( ytype ) )( ybuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 5; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_columnmajor.js b/benchmark/benchmark.3d_blocked_columnmajor.js deleted file mode 100644 index a1415e4..0000000 --- a/benchmark/benchmark.3d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_rowmajor.js b/benchmark/benchmark.3d_blocked_rowmajor.js deleted file mode 100644 index 827061e..0000000 --- a/benchmark/benchmark.3d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_columnmajor.js b/benchmark/benchmark.3d_columnmajor.js deleted file mode 100644 index f318ef9..0000000 --- a/benchmark/benchmark.3d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_rowmajor.js b/benchmark/benchmark.3d_rowmajor.js deleted file mode 100644 index e4c81c8..0000000 --- a/benchmark/benchmark.3d_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_columnmajor.js b/benchmark/benchmark.4d_blocked_columnmajor.js deleted file mode 100644 index c581273..0000000 --- a/benchmark/benchmark.4d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_rowmajor.js b/benchmark/benchmark.4d_blocked_rowmajor.js deleted file mode 100644 index 1af5db2..0000000 --- a/benchmark/benchmark.4d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_columnmajor.js b/benchmark/benchmark.4d_columnmajor.js deleted file mode 100644 index c12b8f0..0000000 --- a/benchmark/benchmark.4d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_rowmajor.js b/benchmark/benchmark.4d_rowmajor.js deleted file mode 100644 index 6f5497f..0000000 --- a/benchmark/benchmark.4d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_columnmajor.js b/benchmark/benchmark.5d_blocked_columnmajor.js deleted file mode 100644 index 5dfce4d..0000000 --- a/benchmark/benchmark.5d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_rowmajor.js b/benchmark/benchmark.5d_blocked_rowmajor.js deleted file mode 100644 index 72441a9..0000000 --- a/benchmark/benchmark.5d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_columnmajor.js b/benchmark/benchmark.5d_columnmajor.js deleted file mode 100644 index e24d575..0000000 --- a/benchmark/benchmark.5d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_rowmajor.js b/benchmark/benchmark.5d_rowmajor.js deleted file mode 100644 index e4fa039..0000000 --- a/benchmark/benchmark.5d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_columnmajor.js b/benchmark/benchmark.6d_blocked_columnmajor.js deleted file mode 100644 index bba975a..0000000 --- a/benchmark/benchmark.6d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_rowmajor.js b/benchmark/benchmark.6d_blocked_rowmajor.js deleted file mode 100644 index 5a3e6c8..0000000 --- a/benchmark/benchmark.6d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_columnmajor.js b/benchmark/benchmark.6d_columnmajor.js deleted file mode 100644 index bb10e51..0000000 --- a/benchmark/benchmark.6d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_rowmajor.js b/benchmark/benchmark.6d_rowmajor.js deleted file mode 100644 index 8018750..0000000 --- a/benchmark/benchmark.6d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_columnmajor.js b/benchmark/benchmark.7d_blocked_columnmajor.js deleted file mode 100644 index f850be3..0000000 --- a/benchmark/benchmark.7d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_rowmajor.js b/benchmark/benchmark.7d_blocked_rowmajor.js deleted file mode 100644 index 3f0687d..0000000 --- a/benchmark/benchmark.7d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_columnmajor.js b/benchmark/benchmark.7d_columnmajor.js deleted file mode 100644 index 5c40d66..0000000 --- a/benchmark/benchmark.7d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_rowmajor.js b/benchmark/benchmark.7d_rowmajor.js deleted file mode 100644 index 8b1903e..0000000 --- a/benchmark/benchmark.7d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_columnmajor.js b/benchmark/benchmark.8d_blocked_columnmajor.js deleted file mode 100644 index 6a55307..0000000 --- a/benchmark/benchmark.8d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_rowmajor.js b/benchmark/benchmark.8d_blocked_rowmajor.js deleted file mode 100644 index 2beb175..0000000 --- a/benchmark/benchmark.8d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_columnmajor.js b/benchmark/benchmark.8d_columnmajor.js deleted file mode 100644 index 92e3036..0000000 --- a/benchmark/benchmark.8d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_rowmajor.js b/benchmark/benchmark.8d_rowmajor.js deleted file mode 100644 index 02fd596..0000000 --- a/benchmark/benchmark.8d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_columnmajor.js b/benchmark/benchmark.9d_blocked_columnmajor.js deleted file mode 100644 index 8b5919f..0000000 --- a/benchmark/benchmark.9d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_rowmajor.js b/benchmark/benchmark.9d_blocked_rowmajor.js deleted file mode 100644 index b44f12a..0000000 --- a/benchmark/benchmark.9d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_columnmajor.js b/benchmark/benchmark.9d_columnmajor.js deleted file mode 100644 index 7f608ec..0000000 --- a/benchmark/benchmark.9d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_rowmajor.js b/benchmark/benchmark.9d_rowmajor.js deleted file mode 100644 index 90cb754..0000000 --- a/benchmark/benchmark.9d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/branches.md b/branches.md deleted file mode 100644 index 458a893..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/ndarray/base/map" -%% click B href "https://github.com/stdlib-js/ndarray-base-map/tree/main" -%% click C href "https://github.com/stdlib-js/ndarray-base-map/tree/production" -%% click D href "https://github.com/stdlib-js/ndarray-base-map/tree/esm" -%% click E href "https://github.com/stdlib-js/ndarray-base-map/tree/deno" -%% click F href "https://github.com/stdlib-js/ndarray-base-map/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/map -[production-url]: https://github.com/stdlib-js/ndarray-base-map/tree/production -[deno-url]: https://github.com/stdlib-js/ndarray-base-map/tree/deno -[deno-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/ndarray-base-map/tree/umd -[umd-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/ndarray-base-map/tree/esm -[esm-readme]: https://github.com/stdlib-js/ndarray-base-map/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 4504e2e..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import map from '../docs/types/index'; -export = map; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index c976c23..0000000 --- a/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict";var ur=function(a,v){return function(){return v||a((v={exports:{}}).exports,v),v.exports}};var Rr=ur(function(z0,Lr){"use strict";var jv=require("@stdlib/ndarray-base-unary-loop-interchange-order"),hv=require("@stdlib/ndarray-base-unary-tiling-block-size"),mv=require("@stdlib/array-base-take-indexed"),kv=require("@stdlib/array-base-reverse");function zv(a,v,V,Q){var r,X,L,R,K,w,g,E,M,B,_,P,C,p,O,l,h,S,k,s,n,d,y,o,u,e;for(e=jv(a.shape,a.strides,v.strides),C=e.sh,l=e.sx,h=e.sy,B=kv(e.idx),r=hv(a.dtype,v.dtype),S=a.offset,k=v.offset,X=a.data,L=v.data,R=l[0],w=h[0],u=C[1];u>0;)for(u0;)for(o0;)for(t0;)for(c0;)for(x0;)for(I0;)for(D0;)for(b0;)for(z0;)for(N0;)for(F0;)for(H0;)for(U0;)for(J0;)for(ir0;)for(ar0;)for($0;)for(Y0;)for(W0;)for(or0;)for(tr0;)for(fr0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(pr0;)for(Sr0;)for(yr0;)for(tr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(Mr0;)for(Er0;)for(Pr0;)for(Tr0;)for(wr0;)for(Or0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(y0;)for(d0;)for(x0;)for(i0;)for(j0;)for(b0;)for(z0;)for(f0;)for(m0;)for(H0;)for(U0;)for(J0;)for(G0;)for(A0;)for($0;)for(Y0;)for(W0;)for(or0;)for(Z0;)for(N0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(ir0;)for(ar0;)for(lr0;)for(cr0;)for(pr0;)for(Sr0;)for(yr0;)for(tr0;)for(fr0;)for(dr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(Pr0;)for(Tr0;)for(wr0;)for(Or0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder = require( '@stdlib/ndarray-base-iteration-order' );\nvar ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' );\nvar blockedaccessormap2d = require( './2d_blocked_accessors.js' );\nvar blockedaccessormap3d = require( './3d_blocked_accessors.js' );\nvar blockedaccessormap4d = require( './4d_blocked_accessors.js' );\nvar blockedaccessormap5d = require( './5d_blocked_accessors.js' );\nvar blockedaccessormap6d = require( './6d_blocked_accessors.js' );\nvar blockedaccessormap7d = require( './7d_blocked_accessors.js' );\nvar blockedaccessormap8d = require( './8d_blocked_accessors.js' );\nvar blockedaccessormap9d = require( './9d_blocked_accessors.js' );\nvar blockedaccessormap10d = require( './10d_blocked_accessors.js' );\nvar blockedmap2d = require( './2d_blocked.js' );\nvar blockedmap3d = require( './3d_blocked.js' );\nvar blockedmap4d = require( './4d_blocked.js' );\nvar blockedmap5d = require( './5d_blocked.js' );\nvar blockedmap6d = require( './6d_blocked.js' );\nvar blockedmap7d = require( './7d_blocked.js' );\nvar blockedmap8d = require( './8d_blocked.js' );\nvar blockedmap9d = require( './9d_blocked.js' );\nvar blockedmap10d = require( './10d_blocked.js' );\nvar accessormap0d = require( './0d_accessors.js' );\nvar accessormap1d = require( './1d_accessors.js' );\nvar accessormap2d = require( './2d_accessors.js' );\nvar accessormap3d = require( './3d_accessors.js' );\nvar accessormap4d = require( './4d_accessors.js' );\nvar accessormap5d = require( './5d_accessors.js' );\nvar accessormap6d = require( './6d_accessors.js' );\nvar accessormap7d = require( './7d_accessors.js' );\nvar accessormap8d = require( './8d_accessors.js' );\nvar accessormap9d = require( './9d_accessors.js' );\nvar accessormap10d = require( './10d_accessors.js' );\nvar accessormapnd = require( './nd_accessors.js' );\nvar map0d = require( './0d.js' );\nvar map1d = require( './1d.js' );\nvar map2d = require( './2d.js' );\nvar map3d = require( './3d.js' );\nvar map4d = require( './4d.js' );\nvar map5d = require( './5d.js' );\nvar map6d = require( './6d.js' );\nvar map7d = require( './7d.js' );\nvar map8d = require( './8d.js' );\nvar map9d = require( './9d.js' );\nvar map10d = require( './10d.js' );\nvar mapnd = require( './nd.js' );\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray.\n*\n* @module @stdlib/ndarray-base-map\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var map = require( '@stdlib/ndarray-base-map' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\n\n// MODULES //\n\nvar main = require( './main.js' );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "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", - "names": ["require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "get", "set", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "get", "set", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "set", "get", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_accessors", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d_accessors", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "get", "set", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd_accessors", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "get", "set", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_d", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_main", "__commonJSMin", "exports", "module", "iterationOrder", "ndarray2object", "blockedaccessormap2d", "blockedaccessormap3d", "blockedaccessormap4d", "blockedaccessormap5d", "blockedaccessormap6d", "blockedaccessormap7d", "blockedaccessormap8d", "blockedaccessormap9d", "blockedaccessormap10d", "blockedmap2d", "blockedmap3d", "blockedmap4d", "blockedmap5d", "blockedmap6d", "blockedmap7d", "blockedmap8d", "blockedmap9d", "blockedmap10d", "accessormap0d", "accessormap1d", "accessormap2d", "accessormap3d", "accessormap4d", "accessormap5d", "accessormap6d", "accessormap7d", "accessormap8d", "accessormap9d", "accessormap10d", "accessormapnd", "map0d", "map1d", "map2d", "map3d", "map4d", "map5d", "map6d", "map7d", "map8d", "map9d", "map10d", "mapnd", "MAP", "ACCESSOR_MAP", "BLOCKED_MAP", "BLOCKED_ACCESSOR_MAP", "MAX_DIMS", "map", "arrays", "fcn", "thisArg", "ndims", "shx", "shy", "iox", "ioy", "len", "x", "y", "i", "d", "main"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index be30da1..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,78 +0,0 @@ - -{{alias}}( arrays, fcn[, thisArg] ) - Applies a callback function to elements in an input ndarray and assigns - results to elements in an output ndarray. - - Each provided "ndarray" should be an object with following properties: - - - dtype: data type. - - data: data buffer. - - shape: dimensions. - - strides: stride lengths. - - offset: index offset. - - order: specifies whether an ndarray is row-major (C-style) or column-major - (Fortran-style). - - The callback function is provided the following arguments: - - - value: current array element. - - indices: current array element indices. - - arr: the input ndarray. - - Parameters - ---------- - arrays: ArrayLikeObject - Array-like object containing one input ndarray and one output ndarray. - - fcn: Function - Callback function. - - thisArg: any (optional) - Callback function execution context. - - Examples - -------- - // Define ndarray data and meta data... - > var xbuf = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ybuf = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] ); - > var dtype = 'float64'; - > var shape = [ 2, 2 ]; - > var sx = [ 2, 1 ]; - > var sy = [ 2, 1 ]; - > var ox = 0; - > var oy = 0; - > var order = 'row-major'; - - // Define a callback function: - > function f( v ) { return v*10.0; }; - - // Using ndarrays... - > var x = {{alias:@stdlib/ndarray/ctor}}( dtype, xbuf, shape, sx, ox, order ); - > var y = {{alias:@stdlib/ndarray/ctor}}( dtype, ybuf, shape, sy, oy, order ); - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - // Using minimal ndarray-like objects... - > x = { - ... 'dtype': dtype, - ... 'data': xbuf, - ... 'shape': shape, - ... 'strides': sx, - ... 'offset': ox, - ... 'order': order - ... }; - > y = { - ... 'dtype': dtype, - ... 'data': ybuf, - ... 'shape': shape, - ... 'strides': sy, - ... 'offset': oy, - ... 'order': order - ... }; - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - See Also - -------- diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 320d548..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/// - -import { ndarray } from '@stdlib/types/ndarray'; -import map = require( './index' ); - -/** -* Mock function to create an ndarray-like object. -* -* @returns ndarray-like object -*/ -function array(): ndarray { - const obj: ndarray = { - 'byteLength': 80, - 'BYTES_PER_ELEMENT': 8, - 'data': new Float64Array( 10 ), - 'dtype': 'float64', - 'flags': { - 'ROW_MAJOR_CONTIGUOUS': true, - 'COLUMN_MAJOR_CONTIGUOUS': false - }, - 'length': 10, - 'ndims': 1, - 'offset': 0, - 'order': 'row-major', - 'shape': [ 10 ], - 'strides': [ 1 ], - 'get': (): number => 0, - 'set': (): ndarray => obj - }; - return obj; -} - -/** -* Evaluates the identity function. -* -* @param x - input value -* @returns input value -*/ -function identity( x: number ): number { - return x; -} - -// TESTS // - -// The function returns `undefined`... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, identity ); // $ExpectType void - map( arrays, identity, {} ); // $ExpectType void -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object containing ndarray-like objects... -{ - map( 5, identity ); // $ExpectError - map( true, identity ); // $ExpectError - map( false, identity ); // $ExpectError - map( null, identity ); // $ExpectError - map( undefined, identity ); // $ExpectError - map( {}, identity ); // $ExpectError - map( [ 1 ], identity ); // $ExpectError - map( ( x: number ): number => x, identity ); // $ExpectError - - map( 5, identity, {} ); // $ExpectError - map( true, identity, {} ); // $ExpectError - map( false, identity, {} ); // $ExpectError - map( null, identity, {} ); // $ExpectError - map( undefined, identity, {} ); // $ExpectError - map( {}, identity, {} ); // $ExpectError - map( [ 1 ], identity, {} ); // $ExpectError - map( ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a callback function... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, '10' ); // $ExpectError - map( arrays, 5 ); // $ExpectError - map( arrays, true ); // $ExpectError - map( arrays, false ); // $ExpectError - map( arrays, null ); // $ExpectError - map( arrays, undefined ); // $ExpectError - map( arrays, [] ); // $ExpectError - map( arrays, {} ); // $ExpectError - - map( arrays, '10', {} ); // $ExpectError - map( arrays, 5, {} ); // $ExpectError - map( arrays, true, {} ); // $ExpectError - map( arrays, false, {} ); // $ExpectError - map( arrays, null, {} ); // $ExpectError - map( arrays, undefined, {} ); // $ExpectError - map( arrays, [], {} ); // $ExpectError - map( arrays, {}, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map(); // $ExpectError - map( arrays ); // $ExpectError{ - map( arrays, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index d89ee00..0000000 --- a/examples/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var ndarray2array = require( '@stdlib/ndarray-base-to-array' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var map = require( './../lib' ); - -var N = 10; -var x = { - 'dtype': 'generic', - 'data': filledarrayBy( N, 'generic', discreteUniform( -100, 100 ) ), - 'shape': [ 5, 2 ], - 'strides': [ 2, 1 ], - 'offset': 0, - 'order': 'row-major' -}; -var y = { - 'dtype': 'generic', - 'data': filledarray( 0, N, 'generic' ), - 'shape': x.shape.slice(), - 'strides': shape2strides( x.shape, 'column-major' ), - 'offset': 0, - 'order': 'column-major' -}; - -map( [ x, y ], naryFunction( abs, 1 ) ); -console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); -console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 97% rename from docs/types/index.d.ts rename to index.d.ts index 78ac9b8..9dd6ef1 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -18,7 +18,7 @@ // TypeScript Version: 4.1 -/// +/// import { ArrayLike } from '@stdlib/types/array'; import { typedndarray } from '@stdlib/types/ndarray'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..b02856c --- /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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var m="throw";var y="throw";var v=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/lib/0d.js b/lib/0d.js deleted file mode 100644 index f19e08f..0000000 --- a/lib/0d.js +++ /dev/null @@ -1,100 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ){ -* return z * 10.0; -* } -* -* // Create a data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0 ] ); -* var ybuf = new Float64Array( 1 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offset: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like object: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* } -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0 ] -*/ -function map0d( x, y, fcn, thisArg ) { - y.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref ); -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/0d_accessors.js b/lib/0d_accessors.js deleted file mode 100644 index 0ce37b7..0000000 --- a/lib/0d_accessors.js +++ /dev/null @@ -1,121 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var ybuf = new Complex64Array( 2 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 30.0 -* -* var im = imagf( v ); -* // returns 40.0 -*/ -function map0d( x, y, fcn, thisArg ) { - y.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/10d.js b/lib/10d.js deleted file mode 100644 index f81fea5..0000000 --- a/lib/10d.js +++ /dev/null @@ -1,280 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_accessors.js b/lib/10d_accessors.js deleted file mode 100644 index b80eca7..0000000 --- a/lib/10d_accessors.js +++ /dev/null @@ -1,305 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_blocked.js b/lib/10d_blocked.js deleted file mode 100644 index 05863d6..0000000 --- a/lib/10d_blocked.js +++ /dev/null @@ -1,389 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/10d_blocked_accessors.js b/lib/10d_blocked_accessors.js deleted file mode 100644 index af78894..0000000 --- a/lib/10d_blocked_accessors.js +++ /dev/null @@ -1,414 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/1d.js b/lib/1d.js deleted file mode 100644 index b5f0220..0000000 --- a/lib/1d.js +++ /dev/null @@ -1,129 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 2 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 40.0, 60.0, 80.0 ] -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/1d_accessors.js b/lib/1d_accessors.js deleted file mode 100644 index b98015f..0000000 --- a/lib/1d_accessors.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 1 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/2d.js b/lib/2d.js deleted file mode 100644 index ac7b2fe..0000000 --- a/lib/2d.js +++ /dev/null @@ -1,166 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_accessors.js b/lib/2d_accessors.js deleted file mode 100644 index 07fb9c6..0000000 --- a/lib/2d_accessors.js +++ /dev/null @@ -1,191 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_blocked.js b/lib/2d_blocked.js deleted file mode 100644 index 9803bb4..0000000 --- a/lib/2d_blocked.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/2d_blocked_accessors.js b/lib/2d_blocked_accessors.js deleted file mode 100644 index 08e5eb7..0000000 --- a/lib/2d_blocked_accessors.js +++ /dev/null @@ -1,220 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/3d.js b/lib/3d.js deleted file mode 100644 index dd42769..0000000 --- a/lib/3d.js +++ /dev/null @@ -1,180 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_accessors.js b/lib/3d_accessors.js deleted file mode 100644 index 0a2042c..0000000 --- a/lib/3d_accessors.js +++ /dev/null @@ -1,205 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 2, 1 ]; -* var sy = [ 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var get; - var set; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_blocked.js b/lib/3d_blocked.js deleted file mode 100644 index d15d04c..0000000 --- a/lib/3d_blocked.js +++ /dev/null @@ -1,221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/3d_blocked_accessors.js b/lib/3d_blocked_accessors.js deleted file mode 100644 index 551417b..0000000 --- a/lib/3d_blocked_accessors.js +++ /dev/null @@ -1,246 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 2, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/4d.js b/lib/4d.js deleted file mode 100644 index 0556d8e..0000000 --- a/lib/4d.js +++ /dev/null @@ -1,194 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_accessors.js b/lib/4d_accessors.js deleted file mode 100644 index 1067a7e..0000000 --- a/lib/4d_accessors.js +++ /dev/null @@ -1,219 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_blocked.js b/lib/4d_blocked.js deleted file mode 100644 index 2b62030..0000000 --- a/lib/4d_blocked.js +++ /dev/null @@ -1,245 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/4d_blocked_accessors.js b/lib/4d_blocked_accessors.js deleted file mode 100644 index fe56f55..0000000 --- a/lib/4d_blocked_accessors.js +++ /dev/null @@ -1,270 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/5d.js b/lib/5d.js deleted file mode 100644 index fb138a5..0000000 --- a/lib/5d.js +++ /dev/null @@ -1,208 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_accessors.js b/lib/5d_accessors.js deleted file mode 100644 index 495e033..0000000 --- a/lib/5d_accessors.js +++ /dev/null @@ -1,233 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_blocked.js b/lib/5d_blocked.js deleted file mode 100644 index 7162107..0000000 --- a/lib/5d_blocked.js +++ /dev/null @@ -1,269 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/5d_blocked_accessors.js b/lib/5d_blocked_accessors.js deleted file mode 100644 index 4a0a880..0000000 --- a/lib/5d_blocked_accessors.js +++ /dev/null @@ -1,294 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/6d.js b/lib/6d.js deleted file mode 100644 index 0389a6e..0000000 --- a/lib/6d.js +++ /dev/null @@ -1,224 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map6d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_accessors.js b/lib/6d_accessors.js deleted file mode 100644 index 0287a54..0000000 --- a/lib/6d_accessors.js +++ /dev/null @@ -1,249 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_blocked.js b/lib/6d_blocked.js deleted file mode 100644 index e850edb..0000000 --- a/lib/6d_blocked.js +++ /dev/null @@ -1,293 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/6d_blocked_accessors.js b/lib/6d_blocked_accessors.js deleted file mode 100644 index 1acf143..0000000 --- a/lib/6d_blocked_accessors.js +++ /dev/null @@ -1,318 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var set; - var get; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/7d.js b/lib/7d.js deleted file mode 100644 index f2c6603..0000000 --- a/lib/7d.js +++ /dev/null @@ -1,238 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_accessors.js b/lib/7d_accessors.js deleted file mode 100644 index e50b3bf..0000000 --- a/lib/7d_accessors.js +++ /dev/null @@ -1,263 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_blocked.js b/lib/7d_blocked.js deleted file mode 100644 index 1b6ce95..0000000 --- a/lib/7d_blocked.js +++ /dev/null @@ -1,317 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/7d_blocked_accessors.js b/lib/7d_blocked_accessors.js deleted file mode 100644 index 52537bc..0000000 --- a/lib/7d_blocked_accessors.js +++ /dev/null @@ -1,342 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/8d.js b/lib/8d.js deleted file mode 100644 index 641c2f9..0000000 --- a/lib/8d.js +++ /dev/null @@ -1,252 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_accessors.js b/lib/8d_accessors.js deleted file mode 100644 index 08c4970..0000000 --- a/lib/8d_accessors.js +++ /dev/null @@ -1,277 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_blocked.js b/lib/8d_blocked.js deleted file mode 100644 index a52ab49..0000000 --- a/lib/8d_blocked.js +++ /dev/null @@ -1,341 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/8d_blocked_accessors.js b/lib/8d_blocked_accessors.js deleted file mode 100644 index e40b718..0000000 --- a/lib/8d_blocked_accessors.js +++ /dev/null @@ -1,366 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/9d.js b/lib/9d.js deleted file mode 100644 index ff40cad..0000000 --- a/lib/9d.js +++ /dev/null @@ -1,266 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_accessors.js b/lib/9d_accessors.js deleted file mode 100644 index ce30b37..0000000 --- a/lib/9d_accessors.js +++ /dev/null @@ -1,291 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_blocked.js b/lib/9d_blocked.js deleted file mode 100644 index 4440ee8..0000000 --- a/lib/9d_blocked.js +++ /dev/null @@ -1,365 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/9d_blocked_accessors.js b/lib/9d_blocked_accessors.js deleted file mode 100644 index 5998505..0000000 --- a/lib/9d_blocked_accessors.js +++ /dev/null @@ -1,390 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 80cf80e..0000000 --- a/lib/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray. -* -* @module @stdlib/ndarray-base-map -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var map = require( '@stdlib/ndarray-base-map' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index cf4fa47..0000000 --- a/lib/main.js +++ /dev/null @@ -1,275 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var iterationOrder = require( '@stdlib/ndarray-base-iteration-order' ); -var ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' ); -var blockedaccessormap2d = require( './2d_blocked_accessors.js' ); -var blockedaccessormap3d = require( './3d_blocked_accessors.js' ); -var blockedaccessormap4d = require( './4d_blocked_accessors.js' ); -var blockedaccessormap5d = require( './5d_blocked_accessors.js' ); -var blockedaccessormap6d = require( './6d_blocked_accessors.js' ); -var blockedaccessormap7d = require( './7d_blocked_accessors.js' ); -var blockedaccessormap8d = require( './8d_blocked_accessors.js' ); -var blockedaccessormap9d = require( './9d_blocked_accessors.js' ); -var blockedaccessormap10d = require( './10d_blocked_accessors.js' ); -var blockedmap2d = require( './2d_blocked.js' ); -var blockedmap3d = require( './3d_blocked.js' ); -var blockedmap4d = require( './4d_blocked.js' ); -var blockedmap5d = require( './5d_blocked.js' ); -var blockedmap6d = require( './6d_blocked.js' ); -var blockedmap7d = require( './7d_blocked.js' ); -var blockedmap8d = require( './8d_blocked.js' ); -var blockedmap9d = require( './9d_blocked.js' ); -var blockedmap10d = require( './10d_blocked.js' ); -var accessormap0d = require( './0d_accessors.js' ); -var accessormap1d = require( './1d_accessors.js' ); -var accessormap2d = require( './2d_accessors.js' ); -var accessormap3d = require( './3d_accessors.js' ); -var accessormap4d = require( './4d_accessors.js' ); -var accessormap5d = require( './5d_accessors.js' ); -var accessormap6d = require( './6d_accessors.js' ); -var accessormap7d = require( './7d_accessors.js' ); -var accessormap8d = require( './8d_accessors.js' ); -var accessormap9d = require( './9d_accessors.js' ); -var accessormap10d = require( './10d_accessors.js' ); -var accessormapnd = require( './nd_accessors.js' ); -var map0d = require( './0d.js' ); -var map1d = require( './1d.js' ); -var map2d = require( './2d.js' ); -var map3d = require( './3d.js' ); -var map4d = require( './4d.js' ); -var map5d = require( './5d.js' ); -var map6d = require( './6d.js' ); -var map7d = require( './7d.js' ); -var map8d = require( './8d.js' ); -var map9d = require( './9d.js' ); -var map10d = require( './10d.js' ); -var mapnd = require( './nd.js' ); - - -// VARIABLES // - -var MAP = [ - map0d, - map1d, - map2d, - map3d, - map4d, - map5d, - map6d, - map7d, - map8d, - map9d, - map10d -]; -var ACCESSOR_MAP = [ - accessormap0d, - accessormap1d, - accessormap2d, - accessormap3d, - accessormap4d, - accessormap5d, - accessormap6d, - accessormap7d, - accessormap8d, - accessormap9d, - accessormap10d -]; -var BLOCKED_MAP = [ - blockedmap2d, // 0 - blockedmap3d, - blockedmap4d, - blockedmap5d, - blockedmap6d, - blockedmap7d, - blockedmap8d, - blockedmap9d, - blockedmap10d // 8 -]; -var BLOCKED_ACCESSOR_MAP = [ - blockedaccessormap2d, // 0 - blockedaccessormap3d, - blockedaccessormap4d, - blockedaccessormap5d, - blockedaccessormap6d, - blockedaccessormap7d, - blockedaccessormap8d, - blockedaccessormap9d, - blockedaccessormap10d // 8 -]; -var MAX_DIMS = MAP.length -1; - - -// MAIN // - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* ## Notes -* -* - Each provided ndarray should be an `object` with the following properties: -* -* - **dtype**: data type. -* - **data**: data buffer. -* - **shape**: dimensions. -* - **strides**: stride lengths. -* - **offset**: index offset. -* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style). -* -* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array -* @param {Callback} fcn - callback function -* @param {*} [thisArg] - callback execution context -* @throws {Error} arrays must have the same number of dimensions -* @throws {Error} arrays must have the same shape -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map( arrays, fcn, thisArg ) { - var ndims; - var shx; - var shy; - var iox; - var ioy; - var len; - var x; - var y; - var i; - var d; - - // Unpack the ndarrays and standardize ndarray meta data: - x = ndarray2object( arrays[ 0 ] ); - y = ndarray2object( arrays[ 1 ] ); - - // Verify that the input and output arrays have the same number of dimensions... - shx = x.shape; - shy = y.shape; - ndims = shx.length; - if ( ndims !== shy.length ) { - throw new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' ); - } - // Determine whether we can avoid iteration altogether... - if ( ndims === 0 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Verify that the input and output arrays have the same dimensions... - len = 1; // number of elements - for ( i = 0; i < ndims; i++ ) { - d = shx[ i ]; - if ( d !== shy[ i ] ) { - throw new Error( 'invalid arguments. Array must have the same shape.' ); - } - // Note that, if one of the dimensions is `0`, the length will be `0`... - len *= d; - } - // Check whether we were provided empty ndarrays... - if ( len === 0 ) { - return; - } - // Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays... - if ( ndims === 1 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Determine iteration order: - iox = iterationOrder( x.strides ); // +/-1 - ioy = iterationOrder( y.strides ); // +/-1 - - // Determine whether we can avoid blocked iteration... - if ( iox !== 0 && ioy !== 0 && iox === ioy ) { - // Determine whether we can use simple nested loops... - if ( ndims <= MAX_DIMS ) { - // So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration... - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Fall-through to blocked iteration... - } - // Determine whether we can perform blocked iteration... - if ( ndims <= MAX_DIMS ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - return BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - // Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)... - if ( x.accessorProtocol || y.accessorProtocol ) { - return accessormapnd( x, y, fcn, thisArg ); - } - mapnd( x, y, fcn, thisArg ); -} - - -// EXPORTS // - -module.exports = map; diff --git a/lib/nd.js b/lib/nd.js deleted file mode 100644 index 379d56e..0000000 --- a/lib/nd.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/lib/nd_accessors.js b/lib/nd_accessors.js deleted file mode 100644 index a28998b..0000000 --- a/lib/nd_accessors.js +++ /dev/null @@ -1,179 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var get; - var set; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/package.json b/package.json index d0cff18..c1b688b 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Apply a callback to elements in an input ndarray and assign results to elements in an output ndarray.", "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,69 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-reverse": "^0.2.2", - "@stdlib/array-base-take-indexed": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/ndarray-base-ind2sub": "^0.2.2", - "@stdlib/ndarray-base-iteration-order": "^0.2.2", - "@stdlib/ndarray-base-ndarraylike2object": "^0.2.2", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", - "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-complex128": "^0.3.0", - "@stdlib/array-filled": "^0.2.1", - "@stdlib/array-filled-by": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/array-ones": "^0.2.1", - "@stdlib/array-typed-complex-ctors": "^0.2.2", - "@stdlib/array-zeros": "^0.2.2", - "@stdlib/assert-is-same-complex128array": "^0.2.2", - "@stdlib/assert-is-same-float64array": "^0.2.2", - "@stdlib/blas-ext-base-dfill": "^0.2.2", - "@stdlib/blas-ext-base-gfill": "^0.2.1", - "@stdlib/complex-float64-ctor": "^0.0.3", - "@stdlib/complex-float64-imag": "^0.1.1", - "@stdlib/complex-float64-real": "^0.1.1", - "@stdlib/math-base-assert-is-nan": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/math-base-special-cbrt": "^0.2.2", - "@stdlib/math-base-special-floor": "^0.2.3", - "@stdlib/math-base-special-identity": "^0.2.2", - "@stdlib/math-base-special-pow": "^0.3.0", - "@stdlib/math-base-special-sqrt": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-strides2offset": "^0.2.2", - "@stdlib/ndarray-base-to-array": "^0.2.1", - "@stdlib/ndarray-ctor": "^0.2.2", - "@stdlib/ndarray-from-scalar": "^0.2.1", - "@stdlib/random-base-discrete-uniform": "^0.2.1", - "@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", "base", @@ -112,9 +26,8 @@ "transform", "for-each" ], - "__stdlib__": {}, "funding": { "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..70ae6a9 --- /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.0d.js b/test/test.0d.js deleted file mode 100644 index 1648cc8..0000000 --- a/test/test.0d.js +++ /dev/null @@ -1,89 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var scalar2ndarray = require( '@stdlib/ndarray-from-scalar' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( 1.0, { - 'dtype': 'float64' - }); - y = scalar2ndarray( 0.0, { - 'dtype': 'float64' - }); - - map( [ x, y ], scale ); - - expected = new Float64Array( [ 10.0 ] ); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( new Complex128( 1.0, 1.0 ), { - 'dtype': 'complex128' - }); - y = scalar2ndarray( new Complex128( 0.0, 0.0 ), { - 'dtype': 'complex128' - }); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ 10.0, 10.0 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.10d.js b/test/test.10d.js deleted file mode 100644 index 74b3998..0000000 --- a/test/test.10d.js +++ /dev/null @@ -1,2667 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -1, -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.1d.js b/test/test.1d.js deleted file mode 100644 index 21e0604..0000000 --- a/test/test.1d.js +++ /dev/null @@ -1,134 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (empty array)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'complex128', ones( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - y = ndarray( 'complex128', zeros( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.2d.js b/test/test.2d.js deleted file mode 100644 index 3e94e94..0000000 --- a/test/test.2d.js +++ /dev/null @@ -1,1195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( x.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.3d.js b/test/test.3d.js deleted file mode 100644 index 07f7516..0000000 --- a/test/test.3d.js +++ /dev/null @@ -1,1331 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ bsize*8, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 2 ]; - st = [ -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ -bsize*8, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ -1, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 2 ]; - st = [ -1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.4d.js b/test/test.4d.js deleted file mode 100644 index 8864e09..0000000 --- a/test/test.4d.js +++ /dev/null @@ -1,1503 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ -2, -2, -1, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ bsize*8, bsize*4, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ bsize*8, bsize*4, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ -bsize*4, bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2 ]; - st = [ -bsize*4, bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ 2, 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ 2, 2, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 1, 2 ]; - st = [ 2, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1 ]; - st = [ 1, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ 2, 4, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*4 ]; - st = [ 2, 4, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.5d.js b/test/test.5d.js deleted file mode 100644 index 16f3119..0000000 --- a/test/test.5d.js +++ /dev/null @@ -1,1740 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -8, -4, -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ -2, 4, -bsize*8, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, 4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ -2, 4, -4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1 ]; - st = [ -2, 4, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, -4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ 2, 4, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.6d.js b/test/test.6d.js deleted file mode 100644 index 41fef40..0000000 --- a/test/test.6d.js +++ /dev/null @@ -1,1892 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, -16, 8, -4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, -4, -4, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.7d.js b/test/test.7d.js deleted file mode 100644 index 8a3a7fe..0000000 --- a/test/test.7d.js +++ /dev/null @@ -1,2099 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, 8, -4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 1, 2 ]; - st = [ bsize*16, -8, 8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -8, -8, -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, -8, 4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ bsize*16, -8, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*16, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 2, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, bsize*8, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 2, 1 ]; - st = [ 2, -4, bsize*8, bsize*8, -bsize*16, bsize*16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 1, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, -2, 4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, -bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.8d.js b/test/test.8d.js deleted file mode 100644 index 2dc6333..0000000 --- a/test/test.8d.js +++ /dev/null @@ -1,2221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, -16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, 16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.9d.js b/test/test.9d.js deleted file mode 100644 index 2a38c2e..0000000 --- a/test/test.9d.js +++ /dev/null @@ -1,2447 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 5512e2c..0000000 --- a/test/test.js +++ /dev/null @@ -1,139 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same number of dimensions', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2 ] ], - [ [ 2, 2 ], [ 2, 2, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ], - [ [ 2, 2, 1, 2 ], [ 2, 1, 2 ] ], - [ [ 1, 1, 4, 2, 2, 2 ], [ 10, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same shape', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2, 2 ] ], - [ [ 3, 3 ], [ 2, 2 ] ], - [ [ 5, 5, 5 ], [ 5, 5, 4 ] ], - [ [ 1, 1, 1 ], [ 2, 2, 2 ] ], - [ [ 1, 4, 1, 2, 2 ], [ 3, 8 ] ], - [ [ 10, 2, 1 ], [ 1, 2, 10 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); diff --git a/test/test.nd.js b/test/test.nd.js deleted file mode 100644 index 9e4b18d..0000000 --- a/test/test.nd.js +++ /dev/null @@ -1,822 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset(sh, st); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); From 3f7975469bbd92099a95e540b213df493582ef0a Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 13 Jan 2025 01:40:48 +0000 Subject: [PATCH 15/32] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0537c16..d0cff18 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,8 @@ "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3" + "@stdlib/types": "^0.4.3", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-complex128": "^0.3.0", @@ -116,4 +117,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 9a19bdfe5eff64ac471d836eca18d5dfd3c3a26f Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 13 Jan 2025 01:47:55 +0000 Subject: [PATCH 16/32] Remove files --- index.d.ts | 117 -- index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 4964 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 9dd6ef1..0000000 --- a/index.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { ArrayLike } from '@stdlib/types/array'; -import { typedndarray } from '@stdlib/types/ndarray'; - -/** -* Callback invoked for each ndarray element. -* -* @returns output value -*/ -type Nullary = ( this: V ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @returns output value -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @returns output value -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Ternary = ( this: V, value: T, indices: Array, arr: typedndarray ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Callback = Nullary | Unary | Binary | Ternary; - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* @param arrays - array-like object containing one input ndarray and one output ndarray -* @param fcn - callback function -* @param thisArg - callback function execution context -* @throws arrays must have the same number of dimensions -* @throws arrays must have the same shape -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var ndarray = require( '@stdlib/ndarray-ctor' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarrays: -* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' ); -* var y = ndarray( 'float64', ybuf, shape, sy, oy, 'row-major' ); -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -declare function map( arrays: ArrayLike>, fcn: Callback, thisArg?: ThisParameterType> ): void; - - -// EXPORTS // - -export = map; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index b02856c..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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var m="throw";var y="throw";var v=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 70ae6a9..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 8581fba3b9ee58b45a4657c201a3b28928b95e51 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 13 Jan 2025 01:48:41 +0000 Subject: [PATCH 17/32] 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 | 64 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 51 +- SECURITY.md | 5 - .../benchmark.10d_blocked_columnmajor.js | 148 - benchmark/benchmark.10d_blocked_rowmajor.js | 148 - benchmark/benchmark.10d_columnmajor.js | 148 - benchmark/benchmark.10d_rowmajor.js | 148 - benchmark/benchmark.11d_columnmajor.js | 148 - benchmark/benchmark.11d_rowmajor.js | 148 - benchmark/benchmark.1d_columnmajor.js | 137 - benchmark/benchmark.1d_rowmajor.js | 137 - benchmark/benchmark.2d_blocked_columnmajor.js | 149 - benchmark/benchmark.2d_blocked_rowmajor.js | 149 - benchmark/benchmark.2d_columnmajor.js | 149 - benchmark/benchmark.2d_rowmajor.js | 150 - benchmark/benchmark.2d_rowmajor_accessors.js | 177 - ...benchmark.2d_rowmajor_accessors_complex.js | 184 - benchmark/benchmark.3d_blocked_columnmajor.js | 149 - benchmark/benchmark.3d_blocked_rowmajor.js | 149 - benchmark/benchmark.3d_columnmajor.js | 149 - benchmark/benchmark.3d_rowmajor.js | 149 - benchmark/benchmark.4d_blocked_columnmajor.js | 148 - benchmark/benchmark.4d_blocked_rowmajor.js | 148 - benchmark/benchmark.4d_columnmajor.js | 148 - benchmark/benchmark.4d_rowmajor.js | 148 - benchmark/benchmark.5d_blocked_columnmajor.js | 148 - benchmark/benchmark.5d_blocked_rowmajor.js | 148 - benchmark/benchmark.5d_columnmajor.js | 148 - benchmark/benchmark.5d_rowmajor.js | 148 - benchmark/benchmark.6d_blocked_columnmajor.js | 148 - benchmark/benchmark.6d_blocked_rowmajor.js | 148 - benchmark/benchmark.6d_columnmajor.js | 148 - benchmark/benchmark.6d_rowmajor.js | 148 - benchmark/benchmark.7d_blocked_columnmajor.js | 148 - benchmark/benchmark.7d_blocked_rowmajor.js | 148 - benchmark/benchmark.7d_columnmajor.js | 148 - benchmark/benchmark.7d_rowmajor.js | 148 - benchmark/benchmark.8d_blocked_columnmajor.js | 148 - benchmark/benchmark.8d_blocked_rowmajor.js | 148 - benchmark/benchmark.8d_columnmajor.js | 148 - benchmark/benchmark.8d_rowmajor.js | 148 - benchmark/benchmark.9d_blocked_columnmajor.js | 148 - benchmark/benchmark.9d_blocked_rowmajor.js | 148 - benchmark/benchmark.9d_columnmajor.js | 148 - benchmark/benchmark.9d_rowmajor.js | 148 - branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 19 - dist/index.js.map | 7 - docs/repl.txt | 78 - docs/types/test.ts | 128 - examples/index.js | 50 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/0d.js | 100 - lib/0d_accessors.js | 121 - lib/10d.js | 280 - lib/10d_accessors.js | 305 -- lib/10d_blocked.js | 389 -- lib/10d_blocked_accessors.js | 414 -- lib/1d.js | 129 - lib/1d_accessors.js | 154 - lib/2d.js | 166 - lib/2d_accessors.js | 191 - lib/2d_blocked.js | 195 - lib/2d_blocked_accessors.js | 220 - lib/3d.js | 180 - lib/3d_accessors.js | 205 - lib/3d_blocked.js | 221 - lib/3d_blocked_accessors.js | 246 - lib/4d.js | 194 - lib/4d_accessors.js | 219 - lib/4d_blocked.js | 245 - lib/4d_blocked_accessors.js | 270 - lib/5d.js | 208 - lib/5d_accessors.js | 233 - lib/5d_blocked.js | 269 - lib/5d_blocked_accessors.js | 294 - lib/6d.js | 224 - lib/6d_accessors.js | 249 - lib/6d_blocked.js | 293 - lib/6d_blocked_accessors.js | 318 -- lib/7d.js | 238 - lib/7d_accessors.js | 263 - lib/7d_blocked.js | 317 -- lib/7d_blocked_accessors.js | 342 -- lib/8d.js | 252 - lib/8d_accessors.js | 277 - lib/8d_blocked.js | 341 -- lib/8d_blocked_accessors.js | 366 -- lib/9d.js | 266 - lib/9d_accessors.js | 291 - lib/9d_blocked.js | 365 -- lib/9d_blocked_accessors.js | 390 -- lib/index.js | 81 - lib/main.js | 275 - lib/nd.js | 154 - lib/nd_accessors.js | 179 - package.json | 93 +- stats.html | 4842 +++++++++++++++++ test/dist/test.js | 33 - test/test.0d.js | 89 - test/test.10d.js | 2667 --------- test/test.1d.js | 134 - test/test.2d.js | 1195 ---- test/test.3d.js | 1331 ----- test/test.4d.js | 1503 ----- test/test.5d.js | 1740 ------ test/test.6d.js | 1892 ------- test/test.7d.js | 2099 ------- test/test.8d.js | 2221 -------- test/test.9d.js | 2447 --------- test/test.js | 139 - test/test.nd.js | 822 --- 139 files changed, 4872 insertions(+), 39321 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.10d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.10d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.10d_columnmajor.js delete mode 100644 benchmark/benchmark.10d_rowmajor.js delete mode 100644 benchmark/benchmark.11d_columnmajor.js delete mode 100644 benchmark/benchmark.11d_rowmajor.js delete mode 100644 benchmark/benchmark.1d_columnmajor.js delete mode 100644 benchmark/benchmark.1d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.2d_columnmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors_complex.js delete mode 100644 benchmark/benchmark.3d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.3d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.3d_columnmajor.js delete mode 100644 benchmark/benchmark.3d_rowmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.4d_columnmajor.js delete mode 100644 benchmark/benchmark.4d_rowmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.5d_columnmajor.js delete mode 100644 benchmark/benchmark.5d_rowmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.6d_columnmajor.js delete mode 100644 benchmark/benchmark.6d_rowmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.7d_columnmajor.js delete mode 100644 benchmark/benchmark.7d_rowmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.8d_columnmajor.js delete mode 100644 benchmark/benchmark.8d_rowmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.9d_columnmajor.js delete mode 100644 benchmark/benchmark.9d_rowmajor.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 (97%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/0d.js delete mode 100644 lib/0d_accessors.js delete mode 100644 lib/10d.js delete mode 100644 lib/10d_accessors.js delete mode 100644 lib/10d_blocked.js delete mode 100644 lib/10d_blocked_accessors.js delete mode 100644 lib/1d.js delete mode 100644 lib/1d_accessors.js delete mode 100644 lib/2d.js delete mode 100644 lib/2d_accessors.js delete mode 100644 lib/2d_blocked.js delete mode 100644 lib/2d_blocked_accessors.js delete mode 100644 lib/3d.js delete mode 100644 lib/3d_accessors.js delete mode 100644 lib/3d_blocked.js delete mode 100644 lib/3d_blocked_accessors.js delete mode 100644 lib/4d.js delete mode 100644 lib/4d_accessors.js delete mode 100644 lib/4d_blocked.js delete mode 100644 lib/4d_blocked_accessors.js delete mode 100644 lib/5d.js delete mode 100644 lib/5d_accessors.js delete mode 100644 lib/5d_blocked.js delete mode 100644 lib/5d_blocked_accessors.js delete mode 100644 lib/6d.js delete mode 100644 lib/6d_accessors.js delete mode 100644 lib/6d_blocked.js delete mode 100644 lib/6d_blocked_accessors.js delete mode 100644 lib/7d.js delete mode 100644 lib/7d_accessors.js delete mode 100644 lib/7d_blocked.js delete mode 100644 lib/7d_blocked_accessors.js delete mode 100644 lib/8d.js delete mode 100644 lib/8d_accessors.js delete mode 100644 lib/8d_blocked.js delete mode 100644 lib/8d_blocked_accessors.js delete mode 100644 lib/9d.js delete mode 100644 lib/9d_accessors.js delete mode 100644 lib/9d_blocked.js delete mode 100644 lib/9d_blocked_accessors.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js delete mode 100644 lib/nd.js delete mode 100644 lib/nd_accessors.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.0d.js delete mode 100644 test/test.10d.js delete mode 100644 test/test.1d.js delete mode 100644 test/test.2d.js delete mode 100644 test/test.3d.js delete mode 100644 test/test.4d.js delete mode 100644 test/test.5d.js delete mode 100644 test/test.6d.js delete mode 100644 test/test.7d.js delete mode 100644 test/test.8d.js delete mode 100644 test/test.9d.js delete mode 100644 test/test.js delete mode 100644 test/test.nd.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 1e23768..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2025-01-13T01:39:10.009Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 00c9c4d..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/ndarray/base/map) 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 0696b91..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/ndarray/base/map) 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 1c89592..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: '29 17 * * 1' - - # 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 + + ```
@@ -214,7 +205,7 @@ console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); ## 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.10d_blocked_columnmajor.js b/benchmark/benchmark.10d_blocked_columnmajor.js deleted file mode 100644 index 05f9922..0000000 --- a/benchmark/benchmark.10d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_blocked_rowmajor.js b/benchmark/benchmark.10d_blocked_rowmajor.js deleted file mode 100644 index 19d212d..0000000 --- a/benchmark/benchmark.10d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_columnmajor.js b/benchmark/benchmark.10d_columnmajor.js deleted file mode 100644 index e74d522..0000000 --- a/benchmark/benchmark.10d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_rowmajor.js b/benchmark/benchmark.10d_rowmajor.js deleted file mode 100644 index e40298d..0000000 --- a/benchmark/benchmark.10d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_columnmajor.js b/benchmark/benchmark.11d_columnmajor.js deleted file mode 100644 index 4e0ed2b..0000000 --- a/benchmark/benchmark.11d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_rowmajor.js b/benchmark/benchmark.11d_rowmajor.js deleted file mode 100644 index febbfb1..0000000 --- a/benchmark/benchmark.11d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_columnmajor.js b/benchmark/benchmark.1d_columnmajor.js deleted file mode 100644 index 90b6a68..0000000 --- a/benchmark/benchmark.1d_columnmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_rowmajor.js b/benchmark/benchmark.1d_rowmajor.js deleted file mode 100644 index 4b8aef0..0000000 --- a/benchmark/benchmark.1d_rowmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_columnmajor.js b/benchmark/benchmark.2d_blocked_columnmajor.js deleted file mode 100644 index 7756089..0000000 --- a/benchmark/benchmark.2d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_rowmajor.js b/benchmark/benchmark.2d_blocked_rowmajor.js deleted file mode 100644 index 211ca54..0000000 --- a/benchmark/benchmark.2d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_columnmajor.js b/benchmark/benchmark.2d_columnmajor.js deleted file mode 100644 index 619a510..0000000 --- a/benchmark/benchmark.2d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor.js b/benchmark/benchmark.2d_rowmajor.js deleted file mode 100644 index 6144d5f..0000000 --- a/benchmark/benchmark.2d_rowmajor.js +++ /dev/null @@ -1,150 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors.js b/benchmark/benchmark.2d_rowmajor_accessors.js deleted file mode 100644 index 7ec19ae..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors.js +++ /dev/null @@ -1,177 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf[ idx ]; -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf[ idx ] = value; -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors_complex.js b/benchmark/benchmark.2d_rowmajor_accessors_complex.js deleted file mode 100644 index 83ca6f9..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors_complex.js +++ /dev/null @@ -1,184 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var ctors = require( '@stdlib/array-typed-complex-ctors' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'complex64' ]; -var order = 'row-major'; -var abtype = { - 'complex64': 'float32', - 'complex128': 'float64' -}; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf.get( idx ); -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf.set( value, idx ); -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var xbuf; - var ybuf; - var x; - var y; - - xbuf = filledarrayBy( len*2, abtype[ xtype ], discreteUniform( -100, 100 ) ); // eslint-disable-line max-len - ybuf = filledarray( 0.0, len*2, abtype[ ytype ] ); - x = { - 'dtype': xtype, - 'data': new ( ctors( xtype ) )( xbuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': new ( ctors( ytype ) )( ybuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 5; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_columnmajor.js b/benchmark/benchmark.3d_blocked_columnmajor.js deleted file mode 100644 index a1415e4..0000000 --- a/benchmark/benchmark.3d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_rowmajor.js b/benchmark/benchmark.3d_blocked_rowmajor.js deleted file mode 100644 index 827061e..0000000 --- a/benchmark/benchmark.3d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_columnmajor.js b/benchmark/benchmark.3d_columnmajor.js deleted file mode 100644 index f318ef9..0000000 --- a/benchmark/benchmark.3d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_rowmajor.js b/benchmark/benchmark.3d_rowmajor.js deleted file mode 100644 index e4c81c8..0000000 --- a/benchmark/benchmark.3d_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_columnmajor.js b/benchmark/benchmark.4d_blocked_columnmajor.js deleted file mode 100644 index c581273..0000000 --- a/benchmark/benchmark.4d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_rowmajor.js b/benchmark/benchmark.4d_blocked_rowmajor.js deleted file mode 100644 index 1af5db2..0000000 --- a/benchmark/benchmark.4d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_columnmajor.js b/benchmark/benchmark.4d_columnmajor.js deleted file mode 100644 index c12b8f0..0000000 --- a/benchmark/benchmark.4d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_rowmajor.js b/benchmark/benchmark.4d_rowmajor.js deleted file mode 100644 index 6f5497f..0000000 --- a/benchmark/benchmark.4d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_columnmajor.js b/benchmark/benchmark.5d_blocked_columnmajor.js deleted file mode 100644 index 5dfce4d..0000000 --- a/benchmark/benchmark.5d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_rowmajor.js b/benchmark/benchmark.5d_blocked_rowmajor.js deleted file mode 100644 index 72441a9..0000000 --- a/benchmark/benchmark.5d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_columnmajor.js b/benchmark/benchmark.5d_columnmajor.js deleted file mode 100644 index e24d575..0000000 --- a/benchmark/benchmark.5d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_rowmajor.js b/benchmark/benchmark.5d_rowmajor.js deleted file mode 100644 index e4fa039..0000000 --- a/benchmark/benchmark.5d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_columnmajor.js b/benchmark/benchmark.6d_blocked_columnmajor.js deleted file mode 100644 index bba975a..0000000 --- a/benchmark/benchmark.6d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_rowmajor.js b/benchmark/benchmark.6d_blocked_rowmajor.js deleted file mode 100644 index 5a3e6c8..0000000 --- a/benchmark/benchmark.6d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_columnmajor.js b/benchmark/benchmark.6d_columnmajor.js deleted file mode 100644 index bb10e51..0000000 --- a/benchmark/benchmark.6d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_rowmajor.js b/benchmark/benchmark.6d_rowmajor.js deleted file mode 100644 index 8018750..0000000 --- a/benchmark/benchmark.6d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_columnmajor.js b/benchmark/benchmark.7d_blocked_columnmajor.js deleted file mode 100644 index f850be3..0000000 --- a/benchmark/benchmark.7d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_rowmajor.js b/benchmark/benchmark.7d_blocked_rowmajor.js deleted file mode 100644 index 3f0687d..0000000 --- a/benchmark/benchmark.7d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_columnmajor.js b/benchmark/benchmark.7d_columnmajor.js deleted file mode 100644 index 5c40d66..0000000 --- a/benchmark/benchmark.7d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_rowmajor.js b/benchmark/benchmark.7d_rowmajor.js deleted file mode 100644 index 8b1903e..0000000 --- a/benchmark/benchmark.7d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_columnmajor.js b/benchmark/benchmark.8d_blocked_columnmajor.js deleted file mode 100644 index 6a55307..0000000 --- a/benchmark/benchmark.8d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_rowmajor.js b/benchmark/benchmark.8d_blocked_rowmajor.js deleted file mode 100644 index 2beb175..0000000 --- a/benchmark/benchmark.8d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_columnmajor.js b/benchmark/benchmark.8d_columnmajor.js deleted file mode 100644 index 92e3036..0000000 --- a/benchmark/benchmark.8d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_rowmajor.js b/benchmark/benchmark.8d_rowmajor.js deleted file mode 100644 index 02fd596..0000000 --- a/benchmark/benchmark.8d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_columnmajor.js b/benchmark/benchmark.9d_blocked_columnmajor.js deleted file mode 100644 index 8b5919f..0000000 --- a/benchmark/benchmark.9d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_rowmajor.js b/benchmark/benchmark.9d_blocked_rowmajor.js deleted file mode 100644 index b44f12a..0000000 --- a/benchmark/benchmark.9d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_columnmajor.js b/benchmark/benchmark.9d_columnmajor.js deleted file mode 100644 index 7f608ec..0000000 --- a/benchmark/benchmark.9d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_rowmajor.js b/benchmark/benchmark.9d_rowmajor.js deleted file mode 100644 index 90cb754..0000000 --- a/benchmark/benchmark.9d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/math-base-special-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/branches.md b/branches.md deleted file mode 100644 index 458a893..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/ndarray/base/map" -%% click B href "https://github.com/stdlib-js/ndarray-base-map/tree/main" -%% click C href "https://github.com/stdlib-js/ndarray-base-map/tree/production" -%% click D href "https://github.com/stdlib-js/ndarray-base-map/tree/esm" -%% click E href "https://github.com/stdlib-js/ndarray-base-map/tree/deno" -%% click F href "https://github.com/stdlib-js/ndarray-base-map/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/map -[production-url]: https://github.com/stdlib-js/ndarray-base-map/tree/production -[deno-url]: https://github.com/stdlib-js/ndarray-base-map/tree/deno -[deno-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/ndarray-base-map/tree/umd -[umd-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/ndarray-base-map/tree/esm -[esm-readme]: https://github.com/stdlib-js/ndarray-base-map/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 4504e2e..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import map from '../docs/types/index'; -export = map; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index c976c23..0000000 --- a/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict";var ur=function(a,v){return function(){return v||a((v={exports:{}}).exports,v),v.exports}};var Rr=ur(function(z0,Lr){"use strict";var jv=require("@stdlib/ndarray-base-unary-loop-interchange-order"),hv=require("@stdlib/ndarray-base-unary-tiling-block-size"),mv=require("@stdlib/array-base-take-indexed"),kv=require("@stdlib/array-base-reverse");function zv(a,v,V,Q){var r,X,L,R,K,w,g,E,M,B,_,P,C,p,O,l,h,S,k,s,n,d,y,o,u,e;for(e=jv(a.shape,a.strides,v.strides),C=e.sh,l=e.sx,h=e.sy,B=kv(e.idx),r=hv(a.dtype,v.dtype),S=a.offset,k=v.offset,X=a.data,L=v.data,R=l[0],w=h[0],u=C[1];u>0;)for(u0;)for(o0;)for(t0;)for(c0;)for(x0;)for(I0;)for(D0;)for(b0;)for(z0;)for(N0;)for(F0;)for(H0;)for(U0;)for(J0;)for(ir0;)for(ar0;)for($0;)for(Y0;)for(W0;)for(or0;)for(tr0;)for(fr0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(pr0;)for(Sr0;)for(yr0;)for(tr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(Mr0;)for(Er0;)for(Pr0;)for(Tr0;)for(wr0;)for(Or0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(y0;)for(d0;)for(x0;)for(i0;)for(j0;)for(b0;)for(z0;)for(f0;)for(m0;)for(H0;)for(U0;)for(J0;)for(G0;)for(A0;)for($0;)for(Y0;)for(W0;)for(or0;)for(Z0;)for(N0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(ir0;)for(ar0;)for(lr0;)for(cr0;)for(pr0;)for(Sr0;)for(yr0;)for(tr0;)for(fr0;)for(dr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(Pr0;)for(Tr0;)for(wr0;)for(Or0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder = require( '@stdlib/ndarray-base-iteration-order' );\nvar ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' );\nvar blockedaccessormap2d = require( './2d_blocked_accessors.js' );\nvar blockedaccessormap3d = require( './3d_blocked_accessors.js' );\nvar blockedaccessormap4d = require( './4d_blocked_accessors.js' );\nvar blockedaccessormap5d = require( './5d_blocked_accessors.js' );\nvar blockedaccessormap6d = require( './6d_blocked_accessors.js' );\nvar blockedaccessormap7d = require( './7d_blocked_accessors.js' );\nvar blockedaccessormap8d = require( './8d_blocked_accessors.js' );\nvar blockedaccessormap9d = require( './9d_blocked_accessors.js' );\nvar blockedaccessormap10d = require( './10d_blocked_accessors.js' );\nvar blockedmap2d = require( './2d_blocked.js' );\nvar blockedmap3d = require( './3d_blocked.js' );\nvar blockedmap4d = require( './4d_blocked.js' );\nvar blockedmap5d = require( './5d_blocked.js' );\nvar blockedmap6d = require( './6d_blocked.js' );\nvar blockedmap7d = require( './7d_blocked.js' );\nvar blockedmap8d = require( './8d_blocked.js' );\nvar blockedmap9d = require( './9d_blocked.js' );\nvar blockedmap10d = require( './10d_blocked.js' );\nvar accessormap0d = require( './0d_accessors.js' );\nvar accessormap1d = require( './1d_accessors.js' );\nvar accessormap2d = require( './2d_accessors.js' );\nvar accessormap3d = require( './3d_accessors.js' );\nvar accessormap4d = require( './4d_accessors.js' );\nvar accessormap5d = require( './5d_accessors.js' );\nvar accessormap6d = require( './6d_accessors.js' );\nvar accessormap7d = require( './7d_accessors.js' );\nvar accessormap8d = require( './8d_accessors.js' );\nvar accessormap9d = require( './9d_accessors.js' );\nvar accessormap10d = require( './10d_accessors.js' );\nvar accessormapnd = require( './nd_accessors.js' );\nvar map0d = require( './0d.js' );\nvar map1d = require( './1d.js' );\nvar map2d = require( './2d.js' );\nvar map3d = require( './3d.js' );\nvar map4d = require( './4d.js' );\nvar map5d = require( './5d.js' );\nvar map6d = require( './6d.js' );\nvar map7d = require( './7d.js' );\nvar map8d = require( './8d.js' );\nvar map9d = require( './9d.js' );\nvar map10d = require( './10d.js' );\nvar mapnd = require( './nd.js' );\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray.\n*\n* @module @stdlib/ndarray-base-map\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var map = require( '@stdlib/ndarray-base-map' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\n\n// MODULES //\n\nvar main = require( './main.js' );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "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", - "names": ["require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "get", "set", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "get", "set", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "set", "get", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_accessors", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d_accessors", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "get", "set", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd_accessors", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "get", "set", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_d", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_main", "__commonJSMin", "exports", "module", "iterationOrder", "ndarray2object", "blockedaccessormap2d", "blockedaccessormap3d", "blockedaccessormap4d", "blockedaccessormap5d", "blockedaccessormap6d", "blockedaccessormap7d", "blockedaccessormap8d", "blockedaccessormap9d", "blockedaccessormap10d", "blockedmap2d", "blockedmap3d", "blockedmap4d", "blockedmap5d", "blockedmap6d", "blockedmap7d", "blockedmap8d", "blockedmap9d", "blockedmap10d", "accessormap0d", "accessormap1d", "accessormap2d", "accessormap3d", "accessormap4d", "accessormap5d", "accessormap6d", "accessormap7d", "accessormap8d", "accessormap9d", "accessormap10d", "accessormapnd", "map0d", "map1d", "map2d", "map3d", "map4d", "map5d", "map6d", "map7d", "map8d", "map9d", "map10d", "mapnd", "MAP", "ACCESSOR_MAP", "BLOCKED_MAP", "BLOCKED_ACCESSOR_MAP", "MAX_DIMS", "map", "arrays", "fcn", "thisArg", "ndims", "shx", "shy", "iox", "ioy", "len", "x", "y", "i", "d", "main"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index be30da1..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,78 +0,0 @@ - -{{alias}}( arrays, fcn[, thisArg] ) - Applies a callback function to elements in an input ndarray and assigns - results to elements in an output ndarray. - - Each provided "ndarray" should be an object with following properties: - - - dtype: data type. - - data: data buffer. - - shape: dimensions. - - strides: stride lengths. - - offset: index offset. - - order: specifies whether an ndarray is row-major (C-style) or column-major - (Fortran-style). - - The callback function is provided the following arguments: - - - value: current array element. - - indices: current array element indices. - - arr: the input ndarray. - - Parameters - ---------- - arrays: ArrayLikeObject - Array-like object containing one input ndarray and one output ndarray. - - fcn: Function - Callback function. - - thisArg: any (optional) - Callback function execution context. - - Examples - -------- - // Define ndarray data and meta data... - > var xbuf = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ybuf = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] ); - > var dtype = 'float64'; - > var shape = [ 2, 2 ]; - > var sx = [ 2, 1 ]; - > var sy = [ 2, 1 ]; - > var ox = 0; - > var oy = 0; - > var order = 'row-major'; - - // Define a callback function: - > function f( v ) { return v*10.0; }; - - // Using ndarrays... - > var x = {{alias:@stdlib/ndarray/ctor}}( dtype, xbuf, shape, sx, ox, order ); - > var y = {{alias:@stdlib/ndarray/ctor}}( dtype, ybuf, shape, sy, oy, order ); - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - // Using minimal ndarray-like objects... - > x = { - ... 'dtype': dtype, - ... 'data': xbuf, - ... 'shape': shape, - ... 'strides': sx, - ... 'offset': ox, - ... 'order': order - ... }; - > y = { - ... 'dtype': dtype, - ... 'data': ybuf, - ... 'shape': shape, - ... 'strides': sy, - ... 'offset': oy, - ... 'order': order - ... }; - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - See Also - -------- diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 320d548..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/// - -import { ndarray } from '@stdlib/types/ndarray'; -import map = require( './index' ); - -/** -* Mock function to create an ndarray-like object. -* -* @returns ndarray-like object -*/ -function array(): ndarray { - const obj: ndarray = { - 'byteLength': 80, - 'BYTES_PER_ELEMENT': 8, - 'data': new Float64Array( 10 ), - 'dtype': 'float64', - 'flags': { - 'ROW_MAJOR_CONTIGUOUS': true, - 'COLUMN_MAJOR_CONTIGUOUS': false - }, - 'length': 10, - 'ndims': 1, - 'offset': 0, - 'order': 'row-major', - 'shape': [ 10 ], - 'strides': [ 1 ], - 'get': (): number => 0, - 'set': (): ndarray => obj - }; - return obj; -} - -/** -* Evaluates the identity function. -* -* @param x - input value -* @returns input value -*/ -function identity( x: number ): number { - return x; -} - -// TESTS // - -// The function returns `undefined`... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, identity ); // $ExpectType void - map( arrays, identity, {} ); // $ExpectType void -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object containing ndarray-like objects... -{ - map( 5, identity ); // $ExpectError - map( true, identity ); // $ExpectError - map( false, identity ); // $ExpectError - map( null, identity ); // $ExpectError - map( undefined, identity ); // $ExpectError - map( {}, identity ); // $ExpectError - map( [ 1 ], identity ); // $ExpectError - map( ( x: number ): number => x, identity ); // $ExpectError - - map( 5, identity, {} ); // $ExpectError - map( true, identity, {} ); // $ExpectError - map( false, identity, {} ); // $ExpectError - map( null, identity, {} ); // $ExpectError - map( undefined, identity, {} ); // $ExpectError - map( {}, identity, {} ); // $ExpectError - map( [ 1 ], identity, {} ); // $ExpectError - map( ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a callback function... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, '10' ); // $ExpectError - map( arrays, 5 ); // $ExpectError - map( arrays, true ); // $ExpectError - map( arrays, false ); // $ExpectError - map( arrays, null ); // $ExpectError - map( arrays, undefined ); // $ExpectError - map( arrays, [] ); // $ExpectError - map( arrays, {} ); // $ExpectError - - map( arrays, '10', {} ); // $ExpectError - map( arrays, 5, {} ); // $ExpectError - map( arrays, true, {} ); // $ExpectError - map( arrays, false, {} ); // $ExpectError - map( arrays, null, {} ); // $ExpectError - map( arrays, undefined, {} ); // $ExpectError - map( arrays, [], {} ); // $ExpectError - map( arrays, {}, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map(); // $ExpectError - map( arrays ); // $ExpectError{ - map( arrays, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index d89ee00..0000000 --- a/examples/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var ndarray2array = require( '@stdlib/ndarray-base-to-array' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var map = require( './../lib' ); - -var N = 10; -var x = { - 'dtype': 'generic', - 'data': filledarrayBy( N, 'generic', discreteUniform( -100, 100 ) ), - 'shape': [ 5, 2 ], - 'strides': [ 2, 1 ], - 'offset': 0, - 'order': 'row-major' -}; -var y = { - 'dtype': 'generic', - 'data': filledarray( 0, N, 'generic' ), - 'shape': x.shape.slice(), - 'strides': shape2strides( x.shape, 'column-major' ), - 'offset': 0, - 'order': 'column-major' -}; - -map( [ x, y ], naryFunction( abs, 1 ) ); -console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); -console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 97% rename from docs/types/index.d.ts rename to index.d.ts index 78ac9b8..9dd6ef1 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -18,7 +18,7 @@ // TypeScript Version: 4.1 -/// +/// import { ArrayLike } from '@stdlib/types/array'; import { typedndarray } from '@stdlib/types/ndarray'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..e7f0232 --- /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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var m="throw";var y="throw";var v=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/lib/0d.js b/lib/0d.js deleted file mode 100644 index f19e08f..0000000 --- a/lib/0d.js +++ /dev/null @@ -1,100 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ){ -* return z * 10.0; -* } -* -* // Create a data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0 ] ); -* var ybuf = new Float64Array( 1 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offset: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like object: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* } -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0 ] -*/ -function map0d( x, y, fcn, thisArg ) { - y.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref ); -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/0d_accessors.js b/lib/0d_accessors.js deleted file mode 100644 index 0ce37b7..0000000 --- a/lib/0d_accessors.js +++ /dev/null @@ -1,121 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var ybuf = new Complex64Array( 2 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 30.0 -* -* var im = imagf( v ); -* // returns 40.0 -*/ -function map0d( x, y, fcn, thisArg ) { - y.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/10d.js b/lib/10d.js deleted file mode 100644 index f81fea5..0000000 --- a/lib/10d.js +++ /dev/null @@ -1,280 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_accessors.js b/lib/10d_accessors.js deleted file mode 100644 index b80eca7..0000000 --- a/lib/10d_accessors.js +++ /dev/null @@ -1,305 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_blocked.js b/lib/10d_blocked.js deleted file mode 100644 index 05863d6..0000000 --- a/lib/10d_blocked.js +++ /dev/null @@ -1,389 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/10d_blocked_accessors.js b/lib/10d_blocked_accessors.js deleted file mode 100644 index af78894..0000000 --- a/lib/10d_blocked_accessors.js +++ /dev/null @@ -1,414 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/1d.js b/lib/1d.js deleted file mode 100644 index b5f0220..0000000 --- a/lib/1d.js +++ /dev/null @@ -1,129 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 2 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 40.0, 60.0, 80.0 ] -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/1d_accessors.js b/lib/1d_accessors.js deleted file mode 100644 index b98015f..0000000 --- a/lib/1d_accessors.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 1 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/2d.js b/lib/2d.js deleted file mode 100644 index ac7b2fe..0000000 --- a/lib/2d.js +++ /dev/null @@ -1,166 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_accessors.js b/lib/2d_accessors.js deleted file mode 100644 index 07fb9c6..0000000 --- a/lib/2d_accessors.js +++ /dev/null @@ -1,191 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_blocked.js b/lib/2d_blocked.js deleted file mode 100644 index 9803bb4..0000000 --- a/lib/2d_blocked.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/2d_blocked_accessors.js b/lib/2d_blocked_accessors.js deleted file mode 100644 index 08e5eb7..0000000 --- a/lib/2d_blocked_accessors.js +++ /dev/null @@ -1,220 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/3d.js b/lib/3d.js deleted file mode 100644 index dd42769..0000000 --- a/lib/3d.js +++ /dev/null @@ -1,180 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_accessors.js b/lib/3d_accessors.js deleted file mode 100644 index 0a2042c..0000000 --- a/lib/3d_accessors.js +++ /dev/null @@ -1,205 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 2, 1 ]; -* var sy = [ 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var get; - var set; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_blocked.js b/lib/3d_blocked.js deleted file mode 100644 index d15d04c..0000000 --- a/lib/3d_blocked.js +++ /dev/null @@ -1,221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/3d_blocked_accessors.js b/lib/3d_blocked_accessors.js deleted file mode 100644 index 551417b..0000000 --- a/lib/3d_blocked_accessors.js +++ /dev/null @@ -1,246 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 2, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/4d.js b/lib/4d.js deleted file mode 100644 index 0556d8e..0000000 --- a/lib/4d.js +++ /dev/null @@ -1,194 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_accessors.js b/lib/4d_accessors.js deleted file mode 100644 index 1067a7e..0000000 --- a/lib/4d_accessors.js +++ /dev/null @@ -1,219 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_blocked.js b/lib/4d_blocked.js deleted file mode 100644 index 2b62030..0000000 --- a/lib/4d_blocked.js +++ /dev/null @@ -1,245 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/4d_blocked_accessors.js b/lib/4d_blocked_accessors.js deleted file mode 100644 index fe56f55..0000000 --- a/lib/4d_blocked_accessors.js +++ /dev/null @@ -1,270 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/5d.js b/lib/5d.js deleted file mode 100644 index fb138a5..0000000 --- a/lib/5d.js +++ /dev/null @@ -1,208 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_accessors.js b/lib/5d_accessors.js deleted file mode 100644 index 495e033..0000000 --- a/lib/5d_accessors.js +++ /dev/null @@ -1,233 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_blocked.js b/lib/5d_blocked.js deleted file mode 100644 index 7162107..0000000 --- a/lib/5d_blocked.js +++ /dev/null @@ -1,269 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/5d_blocked_accessors.js b/lib/5d_blocked_accessors.js deleted file mode 100644 index 4a0a880..0000000 --- a/lib/5d_blocked_accessors.js +++ /dev/null @@ -1,294 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/6d.js b/lib/6d.js deleted file mode 100644 index 0389a6e..0000000 --- a/lib/6d.js +++ /dev/null @@ -1,224 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map6d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_accessors.js b/lib/6d_accessors.js deleted file mode 100644 index 0287a54..0000000 --- a/lib/6d_accessors.js +++ /dev/null @@ -1,249 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_blocked.js b/lib/6d_blocked.js deleted file mode 100644 index e850edb..0000000 --- a/lib/6d_blocked.js +++ /dev/null @@ -1,293 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/6d_blocked_accessors.js b/lib/6d_blocked_accessors.js deleted file mode 100644 index 1acf143..0000000 --- a/lib/6d_blocked_accessors.js +++ /dev/null @@ -1,318 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var set; - var get; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/7d.js b/lib/7d.js deleted file mode 100644 index f2c6603..0000000 --- a/lib/7d.js +++ /dev/null @@ -1,238 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_accessors.js b/lib/7d_accessors.js deleted file mode 100644 index e50b3bf..0000000 --- a/lib/7d_accessors.js +++ /dev/null @@ -1,263 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_blocked.js b/lib/7d_blocked.js deleted file mode 100644 index 1b6ce95..0000000 --- a/lib/7d_blocked.js +++ /dev/null @@ -1,317 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/7d_blocked_accessors.js b/lib/7d_blocked_accessors.js deleted file mode 100644 index 52537bc..0000000 --- a/lib/7d_blocked_accessors.js +++ /dev/null @@ -1,342 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/8d.js b/lib/8d.js deleted file mode 100644 index 641c2f9..0000000 --- a/lib/8d.js +++ /dev/null @@ -1,252 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_accessors.js b/lib/8d_accessors.js deleted file mode 100644 index 08c4970..0000000 --- a/lib/8d_accessors.js +++ /dev/null @@ -1,277 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_blocked.js b/lib/8d_blocked.js deleted file mode 100644 index a52ab49..0000000 --- a/lib/8d_blocked.js +++ /dev/null @@ -1,341 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/8d_blocked_accessors.js b/lib/8d_blocked_accessors.js deleted file mode 100644 index e40b718..0000000 --- a/lib/8d_blocked_accessors.js +++ /dev/null @@ -1,366 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/9d.js b/lib/9d.js deleted file mode 100644 index ff40cad..0000000 --- a/lib/9d.js +++ /dev/null @@ -1,266 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_accessors.js b/lib/9d_accessors.js deleted file mode 100644 index ce30b37..0000000 --- a/lib/9d_accessors.js +++ /dev/null @@ -1,291 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_blocked.js b/lib/9d_blocked.js deleted file mode 100644 index 4440ee8..0000000 --- a/lib/9d_blocked.js +++ /dev/null @@ -1,365 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/9d_blocked_accessors.js b/lib/9d_blocked_accessors.js deleted file mode 100644 index 5998505..0000000 --- a/lib/9d_blocked_accessors.js +++ /dev/null @@ -1,390 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 80cf80e..0000000 --- a/lib/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray. -* -* @module @stdlib/ndarray-base-map -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var map = require( '@stdlib/ndarray-base-map' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index cf4fa47..0000000 --- a/lib/main.js +++ /dev/null @@ -1,275 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var iterationOrder = require( '@stdlib/ndarray-base-iteration-order' ); -var ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' ); -var blockedaccessormap2d = require( './2d_blocked_accessors.js' ); -var blockedaccessormap3d = require( './3d_blocked_accessors.js' ); -var blockedaccessormap4d = require( './4d_blocked_accessors.js' ); -var blockedaccessormap5d = require( './5d_blocked_accessors.js' ); -var blockedaccessormap6d = require( './6d_blocked_accessors.js' ); -var blockedaccessormap7d = require( './7d_blocked_accessors.js' ); -var blockedaccessormap8d = require( './8d_blocked_accessors.js' ); -var blockedaccessormap9d = require( './9d_blocked_accessors.js' ); -var blockedaccessormap10d = require( './10d_blocked_accessors.js' ); -var blockedmap2d = require( './2d_blocked.js' ); -var blockedmap3d = require( './3d_blocked.js' ); -var blockedmap4d = require( './4d_blocked.js' ); -var blockedmap5d = require( './5d_blocked.js' ); -var blockedmap6d = require( './6d_blocked.js' ); -var blockedmap7d = require( './7d_blocked.js' ); -var blockedmap8d = require( './8d_blocked.js' ); -var blockedmap9d = require( './9d_blocked.js' ); -var blockedmap10d = require( './10d_blocked.js' ); -var accessormap0d = require( './0d_accessors.js' ); -var accessormap1d = require( './1d_accessors.js' ); -var accessormap2d = require( './2d_accessors.js' ); -var accessormap3d = require( './3d_accessors.js' ); -var accessormap4d = require( './4d_accessors.js' ); -var accessormap5d = require( './5d_accessors.js' ); -var accessormap6d = require( './6d_accessors.js' ); -var accessormap7d = require( './7d_accessors.js' ); -var accessormap8d = require( './8d_accessors.js' ); -var accessormap9d = require( './9d_accessors.js' ); -var accessormap10d = require( './10d_accessors.js' ); -var accessormapnd = require( './nd_accessors.js' ); -var map0d = require( './0d.js' ); -var map1d = require( './1d.js' ); -var map2d = require( './2d.js' ); -var map3d = require( './3d.js' ); -var map4d = require( './4d.js' ); -var map5d = require( './5d.js' ); -var map6d = require( './6d.js' ); -var map7d = require( './7d.js' ); -var map8d = require( './8d.js' ); -var map9d = require( './9d.js' ); -var map10d = require( './10d.js' ); -var mapnd = require( './nd.js' ); - - -// VARIABLES // - -var MAP = [ - map0d, - map1d, - map2d, - map3d, - map4d, - map5d, - map6d, - map7d, - map8d, - map9d, - map10d -]; -var ACCESSOR_MAP = [ - accessormap0d, - accessormap1d, - accessormap2d, - accessormap3d, - accessormap4d, - accessormap5d, - accessormap6d, - accessormap7d, - accessormap8d, - accessormap9d, - accessormap10d -]; -var BLOCKED_MAP = [ - blockedmap2d, // 0 - blockedmap3d, - blockedmap4d, - blockedmap5d, - blockedmap6d, - blockedmap7d, - blockedmap8d, - blockedmap9d, - blockedmap10d // 8 -]; -var BLOCKED_ACCESSOR_MAP = [ - blockedaccessormap2d, // 0 - blockedaccessormap3d, - blockedaccessormap4d, - blockedaccessormap5d, - blockedaccessormap6d, - blockedaccessormap7d, - blockedaccessormap8d, - blockedaccessormap9d, - blockedaccessormap10d // 8 -]; -var MAX_DIMS = MAP.length -1; - - -// MAIN // - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* ## Notes -* -* - Each provided ndarray should be an `object` with the following properties: -* -* - **dtype**: data type. -* - **data**: data buffer. -* - **shape**: dimensions. -* - **strides**: stride lengths. -* - **offset**: index offset. -* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style). -* -* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array -* @param {Callback} fcn - callback function -* @param {*} [thisArg] - callback execution context -* @throws {Error} arrays must have the same number of dimensions -* @throws {Error} arrays must have the same shape -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map( arrays, fcn, thisArg ) { - var ndims; - var shx; - var shy; - var iox; - var ioy; - var len; - var x; - var y; - var i; - var d; - - // Unpack the ndarrays and standardize ndarray meta data: - x = ndarray2object( arrays[ 0 ] ); - y = ndarray2object( arrays[ 1 ] ); - - // Verify that the input and output arrays have the same number of dimensions... - shx = x.shape; - shy = y.shape; - ndims = shx.length; - if ( ndims !== shy.length ) { - throw new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' ); - } - // Determine whether we can avoid iteration altogether... - if ( ndims === 0 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Verify that the input and output arrays have the same dimensions... - len = 1; // number of elements - for ( i = 0; i < ndims; i++ ) { - d = shx[ i ]; - if ( d !== shy[ i ] ) { - throw new Error( 'invalid arguments. Array must have the same shape.' ); - } - // Note that, if one of the dimensions is `0`, the length will be `0`... - len *= d; - } - // Check whether we were provided empty ndarrays... - if ( len === 0 ) { - return; - } - // Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays... - if ( ndims === 1 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Determine iteration order: - iox = iterationOrder( x.strides ); // +/-1 - ioy = iterationOrder( y.strides ); // +/-1 - - // Determine whether we can avoid blocked iteration... - if ( iox !== 0 && ioy !== 0 && iox === ioy ) { - // Determine whether we can use simple nested loops... - if ( ndims <= MAX_DIMS ) { - // So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration... - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Fall-through to blocked iteration... - } - // Determine whether we can perform blocked iteration... - if ( ndims <= MAX_DIMS ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - return BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - // Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)... - if ( x.accessorProtocol || y.accessorProtocol ) { - return accessormapnd( x, y, fcn, thisArg ); - } - mapnd( x, y, fcn, thisArg ); -} - - -// EXPORTS // - -module.exports = map; diff --git a/lib/nd.js b/lib/nd.js deleted file mode 100644 index 379d56e..0000000 --- a/lib/nd.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/lib/nd_accessors.js b/lib/nd_accessors.js deleted file mode 100644 index a28998b..0000000 --- a/lib/nd_accessors.js +++ /dev/null @@ -1,179 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var get; - var set; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/package.json b/package.json index d0cff18..c1b688b 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Apply a callback to elements in an input ndarray and assign results to elements in an output ndarray.", "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,69 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-reverse": "^0.2.2", - "@stdlib/array-base-take-indexed": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/ndarray-base-ind2sub": "^0.2.2", - "@stdlib/ndarray-base-iteration-order": "^0.2.2", - "@stdlib/ndarray-base-ndarraylike2object": "^0.2.2", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", - "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-complex128": "^0.3.0", - "@stdlib/array-filled": "^0.2.1", - "@stdlib/array-filled-by": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/array-ones": "^0.2.1", - "@stdlib/array-typed-complex-ctors": "^0.2.2", - "@stdlib/array-zeros": "^0.2.2", - "@stdlib/assert-is-same-complex128array": "^0.2.2", - "@stdlib/assert-is-same-float64array": "^0.2.2", - "@stdlib/blas-ext-base-dfill": "^0.2.2", - "@stdlib/blas-ext-base-gfill": "^0.2.1", - "@stdlib/complex-float64-ctor": "^0.0.3", - "@stdlib/complex-float64-imag": "^0.1.1", - "@stdlib/complex-float64-real": "^0.1.1", - "@stdlib/math-base-assert-is-nan": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/math-base-special-cbrt": "^0.2.2", - "@stdlib/math-base-special-floor": "^0.2.3", - "@stdlib/math-base-special-identity": "^0.2.2", - "@stdlib/math-base-special-pow": "^0.3.0", - "@stdlib/math-base-special-sqrt": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-strides2offset": "^0.2.2", - "@stdlib/ndarray-base-to-array": "^0.2.1", - "@stdlib/ndarray-ctor": "^0.2.2", - "@stdlib/ndarray-from-scalar": "^0.2.1", - "@stdlib/random-base-discrete-uniform": "^0.2.1", - "@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", "base", @@ -112,9 +26,8 @@ "transform", "for-each" ], - "__stdlib__": {}, "funding": { "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..5fbeb7f --- /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.0d.js b/test/test.0d.js deleted file mode 100644 index 1648cc8..0000000 --- a/test/test.0d.js +++ /dev/null @@ -1,89 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var scalar2ndarray = require( '@stdlib/ndarray-from-scalar' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( 1.0, { - 'dtype': 'float64' - }); - y = scalar2ndarray( 0.0, { - 'dtype': 'float64' - }); - - map( [ x, y ], scale ); - - expected = new Float64Array( [ 10.0 ] ); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( new Complex128( 1.0, 1.0 ), { - 'dtype': 'complex128' - }); - y = scalar2ndarray( new Complex128( 0.0, 0.0 ), { - 'dtype': 'complex128' - }); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ 10.0, 10.0 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.10d.js b/test/test.10d.js deleted file mode 100644 index 74b3998..0000000 --- a/test/test.10d.js +++ /dev/null @@ -1,2667 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -1, -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.1d.js b/test/test.1d.js deleted file mode 100644 index 21e0604..0000000 --- a/test/test.1d.js +++ /dev/null @@ -1,134 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (empty array)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'complex128', ones( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - y = ndarray( 'complex128', zeros( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.2d.js b/test/test.2d.js deleted file mode 100644 index 3e94e94..0000000 --- a/test/test.2d.js +++ /dev/null @@ -1,1195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( x.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.3d.js b/test/test.3d.js deleted file mode 100644 index 07f7516..0000000 --- a/test/test.3d.js +++ /dev/null @@ -1,1331 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ bsize*8, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 2 ]; - st = [ -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ -bsize*8, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ -1, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 2 ]; - st = [ -1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.4d.js b/test/test.4d.js deleted file mode 100644 index 8864e09..0000000 --- a/test/test.4d.js +++ /dev/null @@ -1,1503 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ -2, -2, -1, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ bsize*8, bsize*4, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ bsize*8, bsize*4, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ -bsize*4, bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2 ]; - st = [ -bsize*4, bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ 2, 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ 2, 2, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 1, 2 ]; - st = [ 2, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1 ]; - st = [ 1, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ 2, 4, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*4 ]; - st = [ 2, 4, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.5d.js b/test/test.5d.js deleted file mode 100644 index 16f3119..0000000 --- a/test/test.5d.js +++ /dev/null @@ -1,1740 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -8, -4, -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ -2, 4, -bsize*8, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, 4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ -2, 4, -4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1 ]; - st = [ -2, 4, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, -4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ 2, 4, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.6d.js b/test/test.6d.js deleted file mode 100644 index 41fef40..0000000 --- a/test/test.6d.js +++ /dev/null @@ -1,1892 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, -16, 8, -4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, -4, -4, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.7d.js b/test/test.7d.js deleted file mode 100644 index 8a3a7fe..0000000 --- a/test/test.7d.js +++ /dev/null @@ -1,2099 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, 8, -4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 1, 2 ]; - st = [ bsize*16, -8, 8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -8, -8, -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, -8, 4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ bsize*16, -8, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*16, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 2, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, bsize*8, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 2, 1 ]; - st = [ 2, -4, bsize*8, bsize*8, -bsize*16, bsize*16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 1, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, -2, 4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, -bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.8d.js b/test/test.8d.js deleted file mode 100644 index 2dc6333..0000000 --- a/test/test.8d.js +++ /dev/null @@ -1,2221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, -16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, 16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.9d.js b/test/test.9d.js deleted file mode 100644 index 2a38c2e..0000000 --- a/test/test.9d.js +++ /dev/null @@ -1,2447 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 5512e2c..0000000 --- a/test/test.js +++ /dev/null @@ -1,139 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same number of dimensions', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2 ] ], - [ [ 2, 2 ], [ 2, 2, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ], - [ [ 2, 2, 1, 2 ], [ 2, 1, 2 ] ], - [ [ 1, 1, 4, 2, 2, 2 ], [ 10, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same shape', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2, 2 ] ], - [ [ 3, 3 ], [ 2, 2 ] ], - [ [ 5, 5, 5 ], [ 5, 5, 4 ] ], - [ [ 1, 1, 1 ], [ 2, 2, 2 ] ], - [ [ 1, 4, 1, 2, 2 ], [ 3, 8 ] ], - [ [ 10, 2, 1 ], [ 1, 2, 10 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); diff --git a/test/test.nd.js b/test/test.nd.js deleted file mode 100644 index 9e4b18d..0000000 --- a/test/test.nd.js +++ /dev/null @@ -1,822 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset(sh, st); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); From 0239fc04c2e0dd32be9d067c593663f5e816e450 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 31 Mar 2025 00:55:23 +0000 Subject: [PATCH 18/32] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 292903e..cc1227b 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,8 @@ "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3" + "@stdlib/types": "^0.4.3", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-complex128": "^0.3.0", @@ -116,4 +117,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 7a32b3764e861ee666721658cc2c3dad50a51693 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 31 Mar 2025 00:59:58 +0000 Subject: [PATCH 19/32] Remove files --- index.d.ts | 117 -- index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 4964 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 9dd6ef1..0000000 --- a/index.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { ArrayLike } from '@stdlib/types/array'; -import { typedndarray } from '@stdlib/types/ndarray'; - -/** -* Callback invoked for each ndarray element. -* -* @returns output value -*/ -type Nullary = ( this: V ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @returns output value -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @returns output value -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Ternary = ( this: V, value: T, indices: Array, arr: typedndarray ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Callback = Nullary | Unary | Binary | Ternary; - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* @param arrays - array-like object containing one input ndarray and one output ndarray -* @param fcn - callback function -* @param thisArg - callback function execution context -* @throws arrays must have the same number of dimensions -* @throws arrays must have the same shape -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var ndarray = require( '@stdlib/ndarray-ctor' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarrays: -* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' ); -* var y = ndarray( 'float64', ybuf, shape, sy, oy, 'row-major' ); -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -declare function map( arrays: ArrayLike>, fcn: Callback, thisArg?: ThisParameterType> ): void; - - -// EXPORTS // - -export = map; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index e7f0232..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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var m="throw";var y="throw";var v=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 5fbeb7f..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 1ada55986e921690b097aa213355a759c86ae970 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 31 Mar 2025 01:00:29 +0000 Subject: [PATCH 20/32] 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 | 66 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 51 +- SECURITY.md | 5 - .../benchmark.10d_blocked_columnmajor.js | 148 - benchmark/benchmark.10d_blocked_rowmajor.js | 148 - benchmark/benchmark.10d_columnmajor.js | 148 - benchmark/benchmark.10d_rowmajor.js | 148 - benchmark/benchmark.11d_columnmajor.js | 148 - benchmark/benchmark.11d_rowmajor.js | 148 - benchmark/benchmark.1d_columnmajor.js | 137 - benchmark/benchmark.1d_rowmajor.js | 137 - benchmark/benchmark.2d_blocked_columnmajor.js | 149 - benchmark/benchmark.2d_blocked_rowmajor.js | 149 - benchmark/benchmark.2d_columnmajor.js | 149 - benchmark/benchmark.2d_rowmajor.js | 150 - benchmark/benchmark.2d_rowmajor_accessors.js | 177 - ...benchmark.2d_rowmajor_accessors_complex.js | 184 - benchmark/benchmark.3d_blocked_columnmajor.js | 149 - benchmark/benchmark.3d_blocked_rowmajor.js | 149 - benchmark/benchmark.3d_columnmajor.js | 149 - benchmark/benchmark.3d_rowmajor.js | 149 - benchmark/benchmark.4d_blocked_columnmajor.js | 148 - benchmark/benchmark.4d_blocked_rowmajor.js | 148 - benchmark/benchmark.4d_columnmajor.js | 148 - benchmark/benchmark.4d_rowmajor.js | 148 - benchmark/benchmark.5d_blocked_columnmajor.js | 148 - benchmark/benchmark.5d_blocked_rowmajor.js | 148 - benchmark/benchmark.5d_columnmajor.js | 148 - benchmark/benchmark.5d_rowmajor.js | 148 - benchmark/benchmark.6d_blocked_columnmajor.js | 148 - benchmark/benchmark.6d_blocked_rowmajor.js | 148 - benchmark/benchmark.6d_columnmajor.js | 148 - benchmark/benchmark.6d_rowmajor.js | 148 - benchmark/benchmark.7d_blocked_columnmajor.js | 148 - benchmark/benchmark.7d_blocked_rowmajor.js | 148 - benchmark/benchmark.7d_columnmajor.js | 148 - benchmark/benchmark.7d_rowmajor.js | 148 - benchmark/benchmark.8d_blocked_columnmajor.js | 148 - benchmark/benchmark.8d_blocked_rowmajor.js | 148 - benchmark/benchmark.8d_columnmajor.js | 148 - benchmark/benchmark.8d_rowmajor.js | 148 - benchmark/benchmark.9d_blocked_columnmajor.js | 148 - benchmark/benchmark.9d_blocked_rowmajor.js | 148 - benchmark/benchmark.9d_columnmajor.js | 148 - benchmark/benchmark.9d_rowmajor.js | 148 - branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 19 - dist/index.js.map | 7 - docs/repl.txt | 78 - docs/types/test.ts | 128 - examples/index.js | 50 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/0d.js | 100 - lib/0d_accessors.js | 121 - lib/10d.js | 280 - lib/10d_accessors.js | 305 -- lib/10d_blocked.js | 389 -- lib/10d_blocked_accessors.js | 414 -- lib/1d.js | 129 - lib/1d_accessors.js | 154 - lib/2d.js | 166 - lib/2d_accessors.js | 191 - lib/2d_blocked.js | 195 - lib/2d_blocked_accessors.js | 220 - lib/3d.js | 180 - lib/3d_accessors.js | 205 - lib/3d_blocked.js | 221 - lib/3d_blocked_accessors.js | 246 - lib/4d.js | 194 - lib/4d_accessors.js | 219 - lib/4d_blocked.js | 245 - lib/4d_blocked_accessors.js | 270 - lib/5d.js | 208 - lib/5d_accessors.js | 233 - lib/5d_blocked.js | 269 - lib/5d_blocked_accessors.js | 294 - lib/6d.js | 224 - lib/6d_accessors.js | 249 - lib/6d_blocked.js | 293 - lib/6d_blocked_accessors.js | 318 -- lib/7d.js | 238 - lib/7d_accessors.js | 263 - lib/7d_blocked.js | 317 -- lib/7d_blocked_accessors.js | 342 -- lib/8d.js | 252 - lib/8d_accessors.js | 277 - lib/8d_blocked.js | 341 -- lib/8d_blocked_accessors.js | 366 -- lib/9d.js | 266 - lib/9d_accessors.js | 291 - lib/9d_blocked.js | 365 -- lib/9d_blocked_accessors.js | 390 -- lib/index.js | 81 - lib/main.js | 275 - lib/nd.js | 154 - lib/nd_accessors.js | 179 - package.json | 93 +- stats.html | 4842 +++++++++++++++++ test/dist/test.js | 33 - test/test.0d.js | 89 - test/test.10d.js | 2667 --------- test/test.1d.js | 134 - test/test.2d.js | 1195 ---- test/test.3d.js | 1331 ----- test/test.4d.js | 1503 ----- test/test.5d.js | 1740 ------ test/test.6d.js | 1892 ------- test/test.7d.js | 2099 ------- test/test.8d.js | 2221 -------- test/test.9d.js | 2447 --------- test/test.js | 139 - test/test.nd.js | 822 --- 139 files changed, 4872 insertions(+), 39326 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.10d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.10d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.10d_columnmajor.js delete mode 100644 benchmark/benchmark.10d_rowmajor.js delete mode 100644 benchmark/benchmark.11d_columnmajor.js delete mode 100644 benchmark/benchmark.11d_rowmajor.js delete mode 100644 benchmark/benchmark.1d_columnmajor.js delete mode 100644 benchmark/benchmark.1d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.2d_columnmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors_complex.js delete mode 100644 benchmark/benchmark.3d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.3d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.3d_columnmajor.js delete mode 100644 benchmark/benchmark.3d_rowmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.4d_columnmajor.js delete mode 100644 benchmark/benchmark.4d_rowmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.5d_columnmajor.js delete mode 100644 benchmark/benchmark.5d_rowmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.6d_columnmajor.js delete mode 100644 benchmark/benchmark.6d_rowmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.7d_columnmajor.js delete mode 100644 benchmark/benchmark.7d_rowmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.8d_columnmajor.js delete mode 100644 benchmark/benchmark.8d_rowmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.9d_columnmajor.js delete mode 100644 benchmark/benchmark.9d_rowmajor.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 (97%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/0d.js delete mode 100644 lib/0d_accessors.js delete mode 100644 lib/10d.js delete mode 100644 lib/10d_accessors.js delete mode 100644 lib/10d_blocked.js delete mode 100644 lib/10d_blocked_accessors.js delete mode 100644 lib/1d.js delete mode 100644 lib/1d_accessors.js delete mode 100644 lib/2d.js delete mode 100644 lib/2d_accessors.js delete mode 100644 lib/2d_blocked.js delete mode 100644 lib/2d_blocked_accessors.js delete mode 100644 lib/3d.js delete mode 100644 lib/3d_accessors.js delete mode 100644 lib/3d_blocked.js delete mode 100644 lib/3d_blocked_accessors.js delete mode 100644 lib/4d.js delete mode 100644 lib/4d_accessors.js delete mode 100644 lib/4d_blocked.js delete mode 100644 lib/4d_blocked_accessors.js delete mode 100644 lib/5d.js delete mode 100644 lib/5d_accessors.js delete mode 100644 lib/5d_blocked.js delete mode 100644 lib/5d_blocked_accessors.js delete mode 100644 lib/6d.js delete mode 100644 lib/6d_accessors.js delete mode 100644 lib/6d_blocked.js delete mode 100644 lib/6d_blocked_accessors.js delete mode 100644 lib/7d.js delete mode 100644 lib/7d_accessors.js delete mode 100644 lib/7d_blocked.js delete mode 100644 lib/7d_blocked_accessors.js delete mode 100644 lib/8d.js delete mode 100644 lib/8d_accessors.js delete mode 100644 lib/8d_blocked.js delete mode 100644 lib/8d_blocked_accessors.js delete mode 100644 lib/9d.js delete mode 100644 lib/9d_accessors.js delete mode 100644 lib/9d_blocked.js delete mode 100644 lib/9d_blocked_accessors.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js delete mode 100644 lib/nd.js delete mode 100644 lib/nd_accessors.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.0d.js delete mode 100644 test/test.10d.js delete mode 100644 test/test.1d.js delete mode 100644 test/test.2d.js delete mode 100644 test/test.3d.js delete mode 100644 test/test.4d.js delete mode 100644 test/test.5d.js delete mode 100644 test/test.6d.js delete mode 100644 test/test.7d.js delete mode 100644 test/test.8d.js delete mode 100644 test/test.9d.js delete mode 100644 test/test.js delete mode 100644 test/test.nd.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 0feef86..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2025-03-31T00:52:05.638Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index a1f1421..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/ndarray/base/map) 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 0696b91..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/ndarray/base/map) 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 1c89592..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: '29 17 * * 1' - - # 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 + + ```
@@ -214,7 +205,7 @@ console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); ## 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.10d_blocked_columnmajor.js b/benchmark/benchmark.10d_blocked_columnmajor.js deleted file mode 100644 index d0903eb..0000000 --- a/benchmark/benchmark.10d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_blocked_rowmajor.js b/benchmark/benchmark.10d_blocked_rowmajor.js deleted file mode 100644 index 623a672..0000000 --- a/benchmark/benchmark.10d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_columnmajor.js b/benchmark/benchmark.10d_columnmajor.js deleted file mode 100644 index 3d63c6a..0000000 --- a/benchmark/benchmark.10d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_rowmajor.js b/benchmark/benchmark.10d_rowmajor.js deleted file mode 100644 index 52addf9..0000000 --- a/benchmark/benchmark.10d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_columnmajor.js b/benchmark/benchmark.11d_columnmajor.js deleted file mode 100644 index eeb5347..0000000 --- a/benchmark/benchmark.11d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_rowmajor.js b/benchmark/benchmark.11d_rowmajor.js deleted file mode 100644 index 6d26910..0000000 --- a/benchmark/benchmark.11d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_columnmajor.js b/benchmark/benchmark.1d_columnmajor.js deleted file mode 100644 index 8f6bab0..0000000 --- a/benchmark/benchmark.1d_columnmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_rowmajor.js b/benchmark/benchmark.1d_rowmajor.js deleted file mode 100644 index e626ef1..0000000 --- a/benchmark/benchmark.1d_rowmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_columnmajor.js b/benchmark/benchmark.2d_blocked_columnmajor.js deleted file mode 100644 index c1023b7..0000000 --- a/benchmark/benchmark.2d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_rowmajor.js b/benchmark/benchmark.2d_blocked_rowmajor.js deleted file mode 100644 index 486875c..0000000 --- a/benchmark/benchmark.2d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_columnmajor.js b/benchmark/benchmark.2d_columnmajor.js deleted file mode 100644 index 2337425..0000000 --- a/benchmark/benchmark.2d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor.js b/benchmark/benchmark.2d_rowmajor.js deleted file mode 100644 index 1a3c39c..0000000 --- a/benchmark/benchmark.2d_rowmajor.js +++ /dev/null @@ -1,150 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors.js b/benchmark/benchmark.2d_rowmajor_accessors.js deleted file mode 100644 index f70f8dc..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors.js +++ /dev/null @@ -1,177 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf[ idx ]; -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf[ idx ] = value; -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors_complex.js b/benchmark/benchmark.2d_rowmajor_accessors_complex.js deleted file mode 100644 index aea8f4b..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors_complex.js +++ /dev/null @@ -1,184 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var ctors = require( '@stdlib/array-typed-complex-ctors' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'complex64' ]; -var order = 'row-major'; -var abtype = { - 'complex64': 'float32', - 'complex128': 'float64' -}; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf.get( idx ); -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf.set( value, idx ); -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var xbuf; - var ybuf; - var x; - var y; - - xbuf = filledarrayBy( len*2, abtype[ xtype ], discreteUniform( -100, 100 ) ); // eslint-disable-line max-len - ybuf = filledarray( 0.0, len*2, abtype[ ytype ] ); - x = { - 'dtype': xtype, - 'data': new ( ctors( xtype ) )( xbuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': new ( ctors( ytype ) )( ybuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 5; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_columnmajor.js b/benchmark/benchmark.3d_blocked_columnmajor.js deleted file mode 100644 index 2193d3d..0000000 --- a/benchmark/benchmark.3d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_rowmajor.js b/benchmark/benchmark.3d_blocked_rowmajor.js deleted file mode 100644 index ae68ae6..0000000 --- a/benchmark/benchmark.3d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_columnmajor.js b/benchmark/benchmark.3d_columnmajor.js deleted file mode 100644 index 719ade5..0000000 --- a/benchmark/benchmark.3d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_rowmajor.js b/benchmark/benchmark.3d_rowmajor.js deleted file mode 100644 index 0bbbb40..0000000 --- a/benchmark/benchmark.3d_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_columnmajor.js b/benchmark/benchmark.4d_blocked_columnmajor.js deleted file mode 100644 index ed280cc..0000000 --- a/benchmark/benchmark.4d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_rowmajor.js b/benchmark/benchmark.4d_blocked_rowmajor.js deleted file mode 100644 index ea544a6..0000000 --- a/benchmark/benchmark.4d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_columnmajor.js b/benchmark/benchmark.4d_columnmajor.js deleted file mode 100644 index bc7d32e..0000000 --- a/benchmark/benchmark.4d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_rowmajor.js b/benchmark/benchmark.4d_rowmajor.js deleted file mode 100644 index bd1fb1c..0000000 --- a/benchmark/benchmark.4d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_columnmajor.js b/benchmark/benchmark.5d_blocked_columnmajor.js deleted file mode 100644 index 13f1278..0000000 --- a/benchmark/benchmark.5d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_rowmajor.js b/benchmark/benchmark.5d_blocked_rowmajor.js deleted file mode 100644 index 8e68348..0000000 --- a/benchmark/benchmark.5d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_columnmajor.js b/benchmark/benchmark.5d_columnmajor.js deleted file mode 100644 index d432997..0000000 --- a/benchmark/benchmark.5d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_rowmajor.js b/benchmark/benchmark.5d_rowmajor.js deleted file mode 100644 index 101f685..0000000 --- a/benchmark/benchmark.5d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_columnmajor.js b/benchmark/benchmark.6d_blocked_columnmajor.js deleted file mode 100644 index 6394204..0000000 --- a/benchmark/benchmark.6d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_rowmajor.js b/benchmark/benchmark.6d_blocked_rowmajor.js deleted file mode 100644 index a7c75b2..0000000 --- a/benchmark/benchmark.6d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_columnmajor.js b/benchmark/benchmark.6d_columnmajor.js deleted file mode 100644 index 0788a72..0000000 --- a/benchmark/benchmark.6d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_rowmajor.js b/benchmark/benchmark.6d_rowmajor.js deleted file mode 100644 index 3fa5a61..0000000 --- a/benchmark/benchmark.6d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_columnmajor.js b/benchmark/benchmark.7d_blocked_columnmajor.js deleted file mode 100644 index 9833b60..0000000 --- a/benchmark/benchmark.7d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_rowmajor.js b/benchmark/benchmark.7d_blocked_rowmajor.js deleted file mode 100644 index 6811333..0000000 --- a/benchmark/benchmark.7d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_columnmajor.js b/benchmark/benchmark.7d_columnmajor.js deleted file mode 100644 index be78749..0000000 --- a/benchmark/benchmark.7d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_rowmajor.js b/benchmark/benchmark.7d_rowmajor.js deleted file mode 100644 index 79843a7..0000000 --- a/benchmark/benchmark.7d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_columnmajor.js b/benchmark/benchmark.8d_blocked_columnmajor.js deleted file mode 100644 index eeb2f7c..0000000 --- a/benchmark/benchmark.8d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_rowmajor.js b/benchmark/benchmark.8d_blocked_rowmajor.js deleted file mode 100644 index 1899e0b..0000000 --- a/benchmark/benchmark.8d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_columnmajor.js b/benchmark/benchmark.8d_columnmajor.js deleted file mode 100644 index e6902ea..0000000 --- a/benchmark/benchmark.8d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_rowmajor.js b/benchmark/benchmark.8d_rowmajor.js deleted file mode 100644 index 519c62f..0000000 --- a/benchmark/benchmark.8d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_columnmajor.js b/benchmark/benchmark.9d_blocked_columnmajor.js deleted file mode 100644 index 1579f28..0000000 --- a/benchmark/benchmark.9d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_rowmajor.js b/benchmark/benchmark.9d_blocked_rowmajor.js deleted file mode 100644 index 1b8469f..0000000 --- a/benchmark/benchmark.9d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_columnmajor.js b/benchmark/benchmark.9d_columnmajor.js deleted file mode 100644 index 5039b2f..0000000 --- a/benchmark/benchmark.9d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_rowmajor.js b/benchmark/benchmark.9d_rowmajor.js deleted file mode 100644 index 181f6df..0000000 --- a/benchmark/benchmark.9d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/branches.md b/branches.md deleted file mode 100644 index 458a893..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/ndarray/base/map" -%% click B href "https://github.com/stdlib-js/ndarray-base-map/tree/main" -%% click C href "https://github.com/stdlib-js/ndarray-base-map/tree/production" -%% click D href "https://github.com/stdlib-js/ndarray-base-map/tree/esm" -%% click E href "https://github.com/stdlib-js/ndarray-base-map/tree/deno" -%% click F href "https://github.com/stdlib-js/ndarray-base-map/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/map -[production-url]: https://github.com/stdlib-js/ndarray-base-map/tree/production -[deno-url]: https://github.com/stdlib-js/ndarray-base-map/tree/deno -[deno-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/ndarray-base-map/tree/umd -[umd-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/ndarray-base-map/tree/esm -[esm-readme]: https://github.com/stdlib-js/ndarray-base-map/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 4504e2e..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import map from '../docs/types/index'; -export = map; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index c976c23..0000000 --- a/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict";var ur=function(a,v){return function(){return v||a((v={exports:{}}).exports,v),v.exports}};var Rr=ur(function(z0,Lr){"use strict";var jv=require("@stdlib/ndarray-base-unary-loop-interchange-order"),hv=require("@stdlib/ndarray-base-unary-tiling-block-size"),mv=require("@stdlib/array-base-take-indexed"),kv=require("@stdlib/array-base-reverse");function zv(a,v,V,Q){var r,X,L,R,K,w,g,E,M,B,_,P,C,p,O,l,h,S,k,s,n,d,y,o,u,e;for(e=jv(a.shape,a.strides,v.strides),C=e.sh,l=e.sx,h=e.sy,B=kv(e.idx),r=hv(a.dtype,v.dtype),S=a.offset,k=v.offset,X=a.data,L=v.data,R=l[0],w=h[0],u=C[1];u>0;)for(u0;)for(o0;)for(t0;)for(c0;)for(x0;)for(I0;)for(D0;)for(b0;)for(z0;)for(N0;)for(F0;)for(H0;)for(U0;)for(J0;)for(ir0;)for(ar0;)for($0;)for(Y0;)for(W0;)for(or0;)for(tr0;)for(fr0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(pr0;)for(Sr0;)for(yr0;)for(tr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(Mr0;)for(Er0;)for(Pr0;)for(Tr0;)for(wr0;)for(Or0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(y0;)for(d0;)for(x0;)for(i0;)for(j0;)for(b0;)for(z0;)for(f0;)for(m0;)for(H0;)for(U0;)for(J0;)for(G0;)for(A0;)for($0;)for(Y0;)for(W0;)for(or0;)for(Z0;)for(N0;)for(dr0;)for(sr0;)for(er0;)for(vr0;)for(rr0;)for(ir0;)for(ar0;)for(lr0;)for(cr0;)for(pr0;)for(Sr0;)for(yr0;)for(tr0;)for(fr0;)for(dr0;)for(br0;)for(mr0;)for(hr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(Pr0;)for(Tr0;)for(wr0;)for(Or0;)for(gr0;)for(zr0;)for(jr0;)for(br0;)for(mr0;)for(hr 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder = require( '@stdlib/ndarray-base-iteration-order' );\nvar ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' );\nvar blockedaccessormap2d = require( './2d_blocked_accessors.js' );\nvar blockedaccessormap3d = require( './3d_blocked_accessors.js' );\nvar blockedaccessormap4d = require( './4d_blocked_accessors.js' );\nvar blockedaccessormap5d = require( './5d_blocked_accessors.js' );\nvar blockedaccessormap6d = require( './6d_blocked_accessors.js' );\nvar blockedaccessormap7d = require( './7d_blocked_accessors.js' );\nvar blockedaccessormap8d = require( './8d_blocked_accessors.js' );\nvar blockedaccessormap9d = require( './9d_blocked_accessors.js' );\nvar blockedaccessormap10d = require( './10d_blocked_accessors.js' );\nvar blockedmap2d = require( './2d_blocked.js' );\nvar blockedmap3d = require( './3d_blocked.js' );\nvar blockedmap4d = require( './4d_blocked.js' );\nvar blockedmap5d = require( './5d_blocked.js' );\nvar blockedmap6d = require( './6d_blocked.js' );\nvar blockedmap7d = require( './7d_blocked.js' );\nvar blockedmap8d = require( './8d_blocked.js' );\nvar blockedmap9d = require( './9d_blocked.js' );\nvar blockedmap10d = require( './10d_blocked.js' );\nvar accessormap0d = require( './0d_accessors.js' );\nvar accessormap1d = require( './1d_accessors.js' );\nvar accessormap2d = require( './2d_accessors.js' );\nvar accessormap3d = require( './3d_accessors.js' );\nvar accessormap4d = require( './4d_accessors.js' );\nvar accessormap5d = require( './5d_accessors.js' );\nvar accessormap6d = require( './6d_accessors.js' );\nvar accessormap7d = require( './7d_accessors.js' );\nvar accessormap8d = require( './8d_accessors.js' );\nvar accessormap9d = require( './9d_accessors.js' );\nvar accessormap10d = require( './10d_accessors.js' );\nvar accessormapnd = require( './nd_accessors.js' );\nvar map0d = require( './0d.js' );\nvar map1d = require( './1d.js' );\nvar map2d = require( './2d.js' );\nvar map3d = require( './3d.js' );\nvar map4d = require( './4d.js' );\nvar map5d = require( './5d.js' );\nvar map6d = require( './6d.js' );\nvar map7d = require( './7d.js' );\nvar map8d = require( './8d.js' );\nvar map9d = require( './9d.js' );\nvar map10d = require( './10d.js' );\nvar mapnd = require( './nd.js' );\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray.\n*\n* @module @stdlib/ndarray-base-map\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var map = require( '@stdlib/ndarray-base-map' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\n\n// MODULES //\n\nvar main = require( './main.js' );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "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", - "names": ["require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "get", "set", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "get", "set", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "set", "get", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_accessors", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d_accessors", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "get", "set", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd_accessors", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "get", "set", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_d", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_main", "__commonJSMin", "exports", "module", "iterationOrder", "ndarray2object", "blockedaccessormap2d", "blockedaccessormap3d", "blockedaccessormap4d", "blockedaccessormap5d", "blockedaccessormap6d", "blockedaccessormap7d", "blockedaccessormap8d", "blockedaccessormap9d", "blockedaccessormap10d", "blockedmap2d", "blockedmap3d", "blockedmap4d", "blockedmap5d", "blockedmap6d", "blockedmap7d", "blockedmap8d", "blockedmap9d", "blockedmap10d", "accessormap0d", "accessormap1d", "accessormap2d", "accessormap3d", "accessormap4d", "accessormap5d", "accessormap6d", "accessormap7d", "accessormap8d", "accessormap9d", "accessormap10d", "accessormapnd", "map0d", "map1d", "map2d", "map3d", "map4d", "map5d", "map6d", "map7d", "map8d", "map9d", "map10d", "mapnd", "MAP", "ACCESSOR_MAP", "BLOCKED_MAP", "BLOCKED_ACCESSOR_MAP", "MAX_DIMS", "map", "arrays", "fcn", "thisArg", "ndims", "shx", "shy", "iox", "ioy", "len", "x", "y", "i", "d", "main"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index be30da1..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,78 +0,0 @@ - -{{alias}}( arrays, fcn[, thisArg] ) - Applies a callback function to elements in an input ndarray and assigns - results to elements in an output ndarray. - - Each provided "ndarray" should be an object with following properties: - - - dtype: data type. - - data: data buffer. - - shape: dimensions. - - strides: stride lengths. - - offset: index offset. - - order: specifies whether an ndarray is row-major (C-style) or column-major - (Fortran-style). - - The callback function is provided the following arguments: - - - value: current array element. - - indices: current array element indices. - - arr: the input ndarray. - - Parameters - ---------- - arrays: ArrayLikeObject - Array-like object containing one input ndarray and one output ndarray. - - fcn: Function - Callback function. - - thisArg: any (optional) - Callback function execution context. - - Examples - -------- - // Define ndarray data and meta data... - > var xbuf = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ybuf = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] ); - > var dtype = 'float64'; - > var shape = [ 2, 2 ]; - > var sx = [ 2, 1 ]; - > var sy = [ 2, 1 ]; - > var ox = 0; - > var oy = 0; - > var order = 'row-major'; - - // Define a callback function: - > function f( v ) { return v*10.0; }; - - // Using ndarrays... - > var x = {{alias:@stdlib/ndarray/ctor}}( dtype, xbuf, shape, sx, ox, order ); - > var y = {{alias:@stdlib/ndarray/ctor}}( dtype, ybuf, shape, sy, oy, order ); - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - // Using minimal ndarray-like objects... - > x = { - ... 'dtype': dtype, - ... 'data': xbuf, - ... 'shape': shape, - ... 'strides': sx, - ... 'offset': ox, - ... 'order': order - ... }; - > y = { - ... 'dtype': dtype, - ... 'data': ybuf, - ... 'shape': shape, - ... 'strides': sy, - ... 'offset': oy, - ... 'order': order - ... }; - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - See Also - -------- diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 320d548..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/// - -import { ndarray } from '@stdlib/types/ndarray'; -import map = require( './index' ); - -/** -* Mock function to create an ndarray-like object. -* -* @returns ndarray-like object -*/ -function array(): ndarray { - const obj: ndarray = { - 'byteLength': 80, - 'BYTES_PER_ELEMENT': 8, - 'data': new Float64Array( 10 ), - 'dtype': 'float64', - 'flags': { - 'ROW_MAJOR_CONTIGUOUS': true, - 'COLUMN_MAJOR_CONTIGUOUS': false - }, - 'length': 10, - 'ndims': 1, - 'offset': 0, - 'order': 'row-major', - 'shape': [ 10 ], - 'strides': [ 1 ], - 'get': (): number => 0, - 'set': (): ndarray => obj - }; - return obj; -} - -/** -* Evaluates the identity function. -* -* @param x - input value -* @returns input value -*/ -function identity( x: number ): number { - return x; -} - -// TESTS // - -// The function returns `undefined`... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, identity ); // $ExpectType void - map( arrays, identity, {} ); // $ExpectType void -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object containing ndarray-like objects... -{ - map( 5, identity ); // $ExpectError - map( true, identity ); // $ExpectError - map( false, identity ); // $ExpectError - map( null, identity ); // $ExpectError - map( undefined, identity ); // $ExpectError - map( {}, identity ); // $ExpectError - map( [ 1 ], identity ); // $ExpectError - map( ( x: number ): number => x, identity ); // $ExpectError - - map( 5, identity, {} ); // $ExpectError - map( true, identity, {} ); // $ExpectError - map( false, identity, {} ); // $ExpectError - map( null, identity, {} ); // $ExpectError - map( undefined, identity, {} ); // $ExpectError - map( {}, identity, {} ); // $ExpectError - map( [ 1 ], identity, {} ); // $ExpectError - map( ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a callback function... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, '10' ); // $ExpectError - map( arrays, 5 ); // $ExpectError - map( arrays, true ); // $ExpectError - map( arrays, false ); // $ExpectError - map( arrays, null ); // $ExpectError - map( arrays, undefined ); // $ExpectError - map( arrays, [] ); // $ExpectError - map( arrays, {} ); // $ExpectError - - map( arrays, '10', {} ); // $ExpectError - map( arrays, 5, {} ); // $ExpectError - map( arrays, true, {} ); // $ExpectError - map( arrays, false, {} ); // $ExpectError - map( arrays, null, {} ); // $ExpectError - map( arrays, undefined, {} ); // $ExpectError - map( arrays, [], {} ); // $ExpectError - map( arrays, {}, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map(); // $ExpectError - map( arrays ); // $ExpectError{ - map( arrays, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index d89ee00..0000000 --- a/examples/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var ndarray2array = require( '@stdlib/ndarray-base-to-array' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var map = require( './../lib' ); - -var N = 10; -var x = { - 'dtype': 'generic', - 'data': filledarrayBy( N, 'generic', discreteUniform( -100, 100 ) ), - 'shape': [ 5, 2 ], - 'strides': [ 2, 1 ], - 'offset': 0, - 'order': 'row-major' -}; -var y = { - 'dtype': 'generic', - 'data': filledarray( 0, N, 'generic' ), - 'shape': x.shape.slice(), - 'strides': shape2strides( x.shape, 'column-major' ), - 'offset': 0, - 'order': 'column-major' -}; - -map( [ x, y ], naryFunction( abs, 1 ) ); -console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); -console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 97% rename from docs/types/index.d.ts rename to index.d.ts index 78ac9b8..9dd6ef1 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -18,7 +18,7 @@ // TypeScript Version: 4.1 -/// +/// import { ArrayLike } from '@stdlib/types/array'; import { typedndarray } from '@stdlib/types/ndarray'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..0f7989e --- /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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var m="throw";var y="throw";var v=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/lib/0d.js b/lib/0d.js deleted file mode 100644 index f19e08f..0000000 --- a/lib/0d.js +++ /dev/null @@ -1,100 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ){ -* return z * 10.0; -* } -* -* // Create a data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0 ] ); -* var ybuf = new Float64Array( 1 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offset: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like object: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* } -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0 ] -*/ -function map0d( x, y, fcn, thisArg ) { - y.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref ); -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/0d_accessors.js b/lib/0d_accessors.js deleted file mode 100644 index 0ce37b7..0000000 --- a/lib/0d_accessors.js +++ /dev/null @@ -1,121 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var ybuf = new Complex64Array( 2 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 30.0 -* -* var im = imagf( v ); -* // returns 40.0 -*/ -function map0d( x, y, fcn, thisArg ) { - y.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/10d.js b/lib/10d.js deleted file mode 100644 index f81fea5..0000000 --- a/lib/10d.js +++ /dev/null @@ -1,280 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_accessors.js b/lib/10d_accessors.js deleted file mode 100644 index b80eca7..0000000 --- a/lib/10d_accessors.js +++ /dev/null @@ -1,305 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_blocked.js b/lib/10d_blocked.js deleted file mode 100644 index 05863d6..0000000 --- a/lib/10d_blocked.js +++ /dev/null @@ -1,389 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/10d_blocked_accessors.js b/lib/10d_blocked_accessors.js deleted file mode 100644 index af78894..0000000 --- a/lib/10d_blocked_accessors.js +++ /dev/null @@ -1,414 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/1d.js b/lib/1d.js deleted file mode 100644 index b5f0220..0000000 --- a/lib/1d.js +++ /dev/null @@ -1,129 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 2 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 40.0, 60.0, 80.0 ] -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/1d_accessors.js b/lib/1d_accessors.js deleted file mode 100644 index b98015f..0000000 --- a/lib/1d_accessors.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 1 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/2d.js b/lib/2d.js deleted file mode 100644 index ac7b2fe..0000000 --- a/lib/2d.js +++ /dev/null @@ -1,166 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_accessors.js b/lib/2d_accessors.js deleted file mode 100644 index 07fb9c6..0000000 --- a/lib/2d_accessors.js +++ /dev/null @@ -1,191 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_blocked.js b/lib/2d_blocked.js deleted file mode 100644 index 9803bb4..0000000 --- a/lib/2d_blocked.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/2d_blocked_accessors.js b/lib/2d_blocked_accessors.js deleted file mode 100644 index 08e5eb7..0000000 --- a/lib/2d_blocked_accessors.js +++ /dev/null @@ -1,220 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/3d.js b/lib/3d.js deleted file mode 100644 index dd42769..0000000 --- a/lib/3d.js +++ /dev/null @@ -1,180 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_accessors.js b/lib/3d_accessors.js deleted file mode 100644 index 0a2042c..0000000 --- a/lib/3d_accessors.js +++ /dev/null @@ -1,205 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 2, 1 ]; -* var sy = [ 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var get; - var set; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_blocked.js b/lib/3d_blocked.js deleted file mode 100644 index d15d04c..0000000 --- a/lib/3d_blocked.js +++ /dev/null @@ -1,221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/3d_blocked_accessors.js b/lib/3d_blocked_accessors.js deleted file mode 100644 index 551417b..0000000 --- a/lib/3d_blocked_accessors.js +++ /dev/null @@ -1,246 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 2, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/4d.js b/lib/4d.js deleted file mode 100644 index 0556d8e..0000000 --- a/lib/4d.js +++ /dev/null @@ -1,194 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_accessors.js b/lib/4d_accessors.js deleted file mode 100644 index 1067a7e..0000000 --- a/lib/4d_accessors.js +++ /dev/null @@ -1,219 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_blocked.js b/lib/4d_blocked.js deleted file mode 100644 index 2b62030..0000000 --- a/lib/4d_blocked.js +++ /dev/null @@ -1,245 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/4d_blocked_accessors.js b/lib/4d_blocked_accessors.js deleted file mode 100644 index fe56f55..0000000 --- a/lib/4d_blocked_accessors.js +++ /dev/null @@ -1,270 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/5d.js b/lib/5d.js deleted file mode 100644 index fb138a5..0000000 --- a/lib/5d.js +++ /dev/null @@ -1,208 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_accessors.js b/lib/5d_accessors.js deleted file mode 100644 index 495e033..0000000 --- a/lib/5d_accessors.js +++ /dev/null @@ -1,233 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_blocked.js b/lib/5d_blocked.js deleted file mode 100644 index 7162107..0000000 --- a/lib/5d_blocked.js +++ /dev/null @@ -1,269 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/5d_blocked_accessors.js b/lib/5d_blocked_accessors.js deleted file mode 100644 index 4a0a880..0000000 --- a/lib/5d_blocked_accessors.js +++ /dev/null @@ -1,294 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/6d.js b/lib/6d.js deleted file mode 100644 index 0389a6e..0000000 --- a/lib/6d.js +++ /dev/null @@ -1,224 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map6d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_accessors.js b/lib/6d_accessors.js deleted file mode 100644 index 0287a54..0000000 --- a/lib/6d_accessors.js +++ /dev/null @@ -1,249 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_blocked.js b/lib/6d_blocked.js deleted file mode 100644 index e850edb..0000000 --- a/lib/6d_blocked.js +++ /dev/null @@ -1,293 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/6d_blocked_accessors.js b/lib/6d_blocked_accessors.js deleted file mode 100644 index 1acf143..0000000 --- a/lib/6d_blocked_accessors.js +++ /dev/null @@ -1,318 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var set; - var get; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/7d.js b/lib/7d.js deleted file mode 100644 index f2c6603..0000000 --- a/lib/7d.js +++ /dev/null @@ -1,238 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_accessors.js b/lib/7d_accessors.js deleted file mode 100644 index e50b3bf..0000000 --- a/lib/7d_accessors.js +++ /dev/null @@ -1,263 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_blocked.js b/lib/7d_blocked.js deleted file mode 100644 index 1b6ce95..0000000 --- a/lib/7d_blocked.js +++ /dev/null @@ -1,317 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/7d_blocked_accessors.js b/lib/7d_blocked_accessors.js deleted file mode 100644 index 52537bc..0000000 --- a/lib/7d_blocked_accessors.js +++ /dev/null @@ -1,342 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/8d.js b/lib/8d.js deleted file mode 100644 index 641c2f9..0000000 --- a/lib/8d.js +++ /dev/null @@ -1,252 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_accessors.js b/lib/8d_accessors.js deleted file mode 100644 index 08c4970..0000000 --- a/lib/8d_accessors.js +++ /dev/null @@ -1,277 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_blocked.js b/lib/8d_blocked.js deleted file mode 100644 index a52ab49..0000000 --- a/lib/8d_blocked.js +++ /dev/null @@ -1,341 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/8d_blocked_accessors.js b/lib/8d_blocked_accessors.js deleted file mode 100644 index e40b718..0000000 --- a/lib/8d_blocked_accessors.js +++ /dev/null @@ -1,366 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/9d.js b/lib/9d.js deleted file mode 100644 index ff40cad..0000000 --- a/lib/9d.js +++ /dev/null @@ -1,266 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_accessors.js b/lib/9d_accessors.js deleted file mode 100644 index ce30b37..0000000 --- a/lib/9d_accessors.js +++ /dev/null @@ -1,291 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( x.order === 'row-major' ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_blocked.js b/lib/9d_blocked.js deleted file mode 100644 index 4440ee8..0000000 --- a/lib/9d_blocked.js +++ /dev/null @@ -1,365 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/9d_blocked_accessors.js b/lib/9d_blocked_accessors.js deleted file mode 100644 index 5998505..0000000 --- a/lib/9d_blocked_accessors.js +++ /dev/null @@ -1,390 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 80cf80e..0000000 --- a/lib/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray. -* -* @module @stdlib/ndarray-base-map -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var map = require( '@stdlib/ndarray-base-map' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index cf4fa47..0000000 --- a/lib/main.js +++ /dev/null @@ -1,275 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var iterationOrder = require( '@stdlib/ndarray-base-iteration-order' ); -var ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' ); -var blockedaccessormap2d = require( './2d_blocked_accessors.js' ); -var blockedaccessormap3d = require( './3d_blocked_accessors.js' ); -var blockedaccessormap4d = require( './4d_blocked_accessors.js' ); -var blockedaccessormap5d = require( './5d_blocked_accessors.js' ); -var blockedaccessormap6d = require( './6d_blocked_accessors.js' ); -var blockedaccessormap7d = require( './7d_blocked_accessors.js' ); -var blockedaccessormap8d = require( './8d_blocked_accessors.js' ); -var blockedaccessormap9d = require( './9d_blocked_accessors.js' ); -var blockedaccessormap10d = require( './10d_blocked_accessors.js' ); -var blockedmap2d = require( './2d_blocked.js' ); -var blockedmap3d = require( './3d_blocked.js' ); -var blockedmap4d = require( './4d_blocked.js' ); -var blockedmap5d = require( './5d_blocked.js' ); -var blockedmap6d = require( './6d_blocked.js' ); -var blockedmap7d = require( './7d_blocked.js' ); -var blockedmap8d = require( './8d_blocked.js' ); -var blockedmap9d = require( './9d_blocked.js' ); -var blockedmap10d = require( './10d_blocked.js' ); -var accessormap0d = require( './0d_accessors.js' ); -var accessormap1d = require( './1d_accessors.js' ); -var accessormap2d = require( './2d_accessors.js' ); -var accessormap3d = require( './3d_accessors.js' ); -var accessormap4d = require( './4d_accessors.js' ); -var accessormap5d = require( './5d_accessors.js' ); -var accessormap6d = require( './6d_accessors.js' ); -var accessormap7d = require( './7d_accessors.js' ); -var accessormap8d = require( './8d_accessors.js' ); -var accessormap9d = require( './9d_accessors.js' ); -var accessormap10d = require( './10d_accessors.js' ); -var accessormapnd = require( './nd_accessors.js' ); -var map0d = require( './0d.js' ); -var map1d = require( './1d.js' ); -var map2d = require( './2d.js' ); -var map3d = require( './3d.js' ); -var map4d = require( './4d.js' ); -var map5d = require( './5d.js' ); -var map6d = require( './6d.js' ); -var map7d = require( './7d.js' ); -var map8d = require( './8d.js' ); -var map9d = require( './9d.js' ); -var map10d = require( './10d.js' ); -var mapnd = require( './nd.js' ); - - -// VARIABLES // - -var MAP = [ - map0d, - map1d, - map2d, - map3d, - map4d, - map5d, - map6d, - map7d, - map8d, - map9d, - map10d -]; -var ACCESSOR_MAP = [ - accessormap0d, - accessormap1d, - accessormap2d, - accessormap3d, - accessormap4d, - accessormap5d, - accessormap6d, - accessormap7d, - accessormap8d, - accessormap9d, - accessormap10d -]; -var BLOCKED_MAP = [ - blockedmap2d, // 0 - blockedmap3d, - blockedmap4d, - blockedmap5d, - blockedmap6d, - blockedmap7d, - blockedmap8d, - blockedmap9d, - blockedmap10d // 8 -]; -var BLOCKED_ACCESSOR_MAP = [ - blockedaccessormap2d, // 0 - blockedaccessormap3d, - blockedaccessormap4d, - blockedaccessormap5d, - blockedaccessormap6d, - blockedaccessormap7d, - blockedaccessormap8d, - blockedaccessormap9d, - blockedaccessormap10d // 8 -]; -var MAX_DIMS = MAP.length -1; - - -// MAIN // - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* ## Notes -* -* - Each provided ndarray should be an `object` with the following properties: -* -* - **dtype**: data type. -* - **data**: data buffer. -* - **shape**: dimensions. -* - **strides**: stride lengths. -* - **offset**: index offset. -* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style). -* -* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array -* @param {Callback} fcn - callback function -* @param {*} [thisArg] - callback execution context -* @throws {Error} arrays must have the same number of dimensions -* @throws {Error} arrays must have the same shape -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map( arrays, fcn, thisArg ) { - var ndims; - var shx; - var shy; - var iox; - var ioy; - var len; - var x; - var y; - var i; - var d; - - // Unpack the ndarrays and standardize ndarray meta data: - x = ndarray2object( arrays[ 0 ] ); - y = ndarray2object( arrays[ 1 ] ); - - // Verify that the input and output arrays have the same number of dimensions... - shx = x.shape; - shy = y.shape; - ndims = shx.length; - if ( ndims !== shy.length ) { - throw new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' ); - } - // Determine whether we can avoid iteration altogether... - if ( ndims === 0 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Verify that the input and output arrays have the same dimensions... - len = 1; // number of elements - for ( i = 0; i < ndims; i++ ) { - d = shx[ i ]; - if ( d !== shy[ i ] ) { - throw new Error( 'invalid arguments. Array must have the same shape.' ); - } - // Note that, if one of the dimensions is `0`, the length will be `0`... - len *= d; - } - // Check whether we were provided empty ndarrays... - if ( len === 0 ) { - return; - } - // Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays... - if ( ndims === 1 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Determine iteration order: - iox = iterationOrder( x.strides ); // +/-1 - ioy = iterationOrder( y.strides ); // +/-1 - - // Determine whether we can avoid blocked iteration... - if ( iox !== 0 && ioy !== 0 && iox === ioy ) { - // Determine whether we can use simple nested loops... - if ( ndims <= MAX_DIMS ) { - // So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration... - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Fall-through to blocked iteration... - } - // Determine whether we can perform blocked iteration... - if ( ndims <= MAX_DIMS ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - return BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - // Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)... - if ( x.accessorProtocol || y.accessorProtocol ) { - return accessormapnd( x, y, fcn, thisArg ); - } - mapnd( x, y, fcn, thisArg ); -} - - -// EXPORTS // - -module.exports = map; diff --git a/lib/nd.js b/lib/nd.js deleted file mode 100644 index 379d56e..0000000 --- a/lib/nd.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/lib/nd_accessors.js b/lib/nd_accessors.js deleted file mode 100644 index a28998b..0000000 --- a/lib/nd_accessors.js +++ /dev/null @@ -1,179 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var get; - var set; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/package.json b/package.json index cc1227b..c1b688b 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Apply a callback to elements in an input ndarray and assign results to elements in an output ndarray.", "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,69 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-reverse": "^0.2.2", - "@stdlib/array-base-take-indexed": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/ndarray-base-ind2sub": "^0.2.2", - "@stdlib/ndarray-base-iteration-order": "^0.2.2", - "@stdlib/ndarray-base-ndarraylike2object": "^0.2.2", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", - "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-complex128": "^0.3.0", - "@stdlib/array-filled": "^0.2.1", - "@stdlib/array-filled-by": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/array-ones": "^0.2.1", - "@stdlib/array-typed-complex-ctors": "^0.2.2", - "@stdlib/array-zeros": "^0.2.2", - "@stdlib/assert-is-same-complex128array": "^0.2.2", - "@stdlib/assert-is-same-float64array": "^0.2.2", - "@stdlib/blas-ext-base-dfill": "^0.2.2", - "@stdlib/blas-ext-base-gfill": "^0.2.1", - "@stdlib/complex-float64-ctor": "^0.0.3", - "@stdlib/complex-float64-imag": "^0.1.1", - "@stdlib/complex-float64-real": "^0.1.1", - "@stdlib/math-base-assert-is-nan": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/math-base-special-cbrt": "^0.2.2", - "@stdlib/math-base-special-floor": "^0.2.3", - "@stdlib/math-base-special-pow": "^0.3.0", - "@stdlib/math-base-special-sqrt": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-strides2offset": "^0.2.2", - "@stdlib/ndarray-base-to-array": "^0.2.1", - "@stdlib/ndarray-ctor": "^0.2.2", - "@stdlib/ndarray-from-scalar": "^0.2.1", - "@stdlib/number-float64-base-identity": "github:stdlib-js/number-float64-base-identity#main", - "@stdlib/random-base-discrete-uniform": "^0.2.1", - "@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", "base", @@ -112,9 +26,8 @@ "transform", "for-each" ], - "__stdlib__": {}, "funding": { "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..29ed990 --- /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.0d.js b/test/test.0d.js deleted file mode 100644 index 1648cc8..0000000 --- a/test/test.0d.js +++ /dev/null @@ -1,89 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var scalar2ndarray = require( '@stdlib/ndarray-from-scalar' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( 1.0, { - 'dtype': 'float64' - }); - y = scalar2ndarray( 0.0, { - 'dtype': 'float64' - }); - - map( [ x, y ], scale ); - - expected = new Float64Array( [ 10.0 ] ); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( new Complex128( 1.0, 1.0 ), { - 'dtype': 'complex128' - }); - y = scalar2ndarray( new Complex128( 0.0, 0.0 ), { - 'dtype': 'complex128' - }); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ 10.0, 10.0 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.10d.js b/test/test.10d.js deleted file mode 100644 index 74b3998..0000000 --- a/test/test.10d.js +++ /dev/null @@ -1,2667 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -1, -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.1d.js b/test/test.1d.js deleted file mode 100644 index 21e0604..0000000 --- a/test/test.1d.js +++ /dev/null @@ -1,134 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (empty array)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'complex128', ones( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - y = ndarray( 'complex128', zeros( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.2d.js b/test/test.2d.js deleted file mode 100644 index 3e94e94..0000000 --- a/test/test.2d.js +++ /dev/null @@ -1,1195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( x.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.3d.js b/test/test.3d.js deleted file mode 100644 index 07f7516..0000000 --- a/test/test.3d.js +++ /dev/null @@ -1,1331 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ bsize*8, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 2 ]; - st = [ -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ -bsize*8, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ -1, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 2 ]; - st = [ -1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.4d.js b/test/test.4d.js deleted file mode 100644 index 8864e09..0000000 --- a/test/test.4d.js +++ /dev/null @@ -1,1503 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ -2, -2, -1, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ bsize*8, bsize*4, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ bsize*8, bsize*4, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ -bsize*4, bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2 ]; - st = [ -bsize*4, bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ 2, 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ 2, 2, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 1, 2 ]; - st = [ 2, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1 ]; - st = [ 1, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ 2, 4, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*4 ]; - st = [ 2, 4, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.5d.js b/test/test.5d.js deleted file mode 100644 index 16f3119..0000000 --- a/test/test.5d.js +++ /dev/null @@ -1,1740 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -8, -4, -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ -2, 4, -bsize*8, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, 4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ -2, 4, -4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1 ]; - st = [ -2, 4, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, -4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ 2, 4, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.6d.js b/test/test.6d.js deleted file mode 100644 index 41fef40..0000000 --- a/test/test.6d.js +++ /dev/null @@ -1,1892 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, -16, 8, -4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, -4, -4, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.7d.js b/test/test.7d.js deleted file mode 100644 index 8a3a7fe..0000000 --- a/test/test.7d.js +++ /dev/null @@ -1,2099 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, 8, -4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 1, 2 ]; - st = [ bsize*16, -8, 8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -8, -8, -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, -8, 4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ bsize*16, -8, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*16, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 2, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, bsize*8, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 2, 1 ]; - st = [ 2, -4, bsize*8, bsize*8, -bsize*16, bsize*16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 1, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, -2, 4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, -bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.8d.js b/test/test.8d.js deleted file mode 100644 index 2dc6333..0000000 --- a/test/test.8d.js +++ /dev/null @@ -1,2221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, -16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, 16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.9d.js b/test/test.9d.js deleted file mode 100644 index 2a38c2e..0000000 --- a/test/test.9d.js +++ /dev/null @@ -1,2447 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 5512e2c..0000000 --- a/test/test.js +++ /dev/null @@ -1,139 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same number of dimensions', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2 ] ], - [ [ 2, 2 ], [ 2, 2, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ], - [ [ 2, 2, 1, 2 ], [ 2, 1, 2 ] ], - [ [ 1, 1, 4, 2, 2, 2 ], [ 10, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same shape', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2, 2 ] ], - [ [ 3, 3 ], [ 2, 2 ] ], - [ [ 5, 5, 5 ], [ 5, 5, 4 ] ], - [ [ 1, 1, 1 ], [ 2, 2, 2 ] ], - [ [ 1, 4, 1, 2, 2 ], [ 3, 8 ] ], - [ [ 10, 2, 1 ], [ 1, 2, 10 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); diff --git a/test/test.nd.js b/test/test.nd.js deleted file mode 100644 index 9e4b18d..0000000 --- a/test/test.nd.js +++ /dev/null @@ -1,822 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset(sh, st); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); From 4c31a64ff3d895dc91f88db055cc2f123e4fadb3 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 8 May 2025 02:55:39 +0000 Subject: [PATCH 21/32] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index af54f1b..5182ef8 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,8 @@ "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3" + "@stdlib/types": "^0.4.3", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-complex128": "^0.3.0", @@ -117,4 +118,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 4e2ff4c761066a57f90ea73cea46bde4b63b1162 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 8 May 2025 02:56:14 +0000 Subject: [PATCH 22/32] Remove files --- index.d.ts | 117 -- index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 4964 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 9dd6ef1..0000000 --- a/index.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { ArrayLike } from '@stdlib/types/array'; -import { typedndarray } from '@stdlib/types/ndarray'; - -/** -* Callback invoked for each ndarray element. -* -* @returns output value -*/ -type Nullary = ( this: V ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @returns output value -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @returns output value -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Ternary = ( this: V, value: T, indices: Array, arr: typedndarray ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Callback = Nullary | Unary | Binary | Ternary; - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* @param arrays - array-like object containing one input ndarray and one output ndarray -* @param fcn - callback function -* @param thisArg - callback function execution context -* @throws arrays must have the same number of dimensions -* @throws arrays must have the same shape -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var ndarray = require( '@stdlib/ndarray-ctor' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarrays: -* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' ); -* var y = ndarray( 'float64', ybuf, shape, sy, oy, 'row-major' ); -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -declare function map( arrays: ArrayLike>, fcn: Callback, thisArg?: ThisParameterType> ): void; - - -// EXPORTS // - -export = map; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 0f7989e..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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var m="throw";var y="throw";var v=[function(r,o,s,f){o.data[o.offset]=s.call(f,r.data[r.offset],[],r.ref)},function(r,o,s,f){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=o.strides[0],c=r.offset,n=o.offset,e=r.data,t=o.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(fr0;)for(sr0;)for(or0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(xr0;)for(ur0;)for(jr0;)for(vr0;)for(yr0;)for(mr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(kr0;)for(Pr0;)for(wr0;)for(br0;)for(gr0;)for(xr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && iox === ioy ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( x.order === 'row-major' ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","ordx","ordy","numel","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 29ed990..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 16c050ce8f05f65c5df656ff242eca5cefa2cfca Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 8 May 2025 02:56:47 +0000 Subject: [PATCH 23/32] Auto-generated commit --- .editorconfig | 180 - .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 - .github/workflows/test_published_package.yml | 105 - .gitignore | 194 - .npmignore | 229 - .npmrc | 31 - CHANGELOG.md | 70 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 51 +- SECURITY.md | 5 - .../benchmark.10d_blocked_columnmajor.js | 148 - benchmark/benchmark.10d_blocked_rowmajor.js | 148 - benchmark/benchmark.10d_columnmajor.js | 148 - benchmark/benchmark.10d_rowmajor.js | 148 - benchmark/benchmark.11d_columnmajor.js | 148 - benchmark/benchmark.11d_rowmajor.js | 148 - benchmark/benchmark.1d_columnmajor.js | 137 - benchmark/benchmark.1d_rowmajor.js | 137 - benchmark/benchmark.2d_blocked_columnmajor.js | 149 - benchmark/benchmark.2d_blocked_rowmajor.js | 149 - benchmark/benchmark.2d_columnmajor.js | 149 - benchmark/benchmark.2d_rowmajor.js | 150 - benchmark/benchmark.2d_rowmajor_accessors.js | 177 - ...benchmark.2d_rowmajor_accessors_complex.js | 184 - benchmark/benchmark.3d_blocked_columnmajor.js | 149 - benchmark/benchmark.3d_blocked_rowmajor.js | 149 - benchmark/benchmark.3d_columnmajor.js | 149 - benchmark/benchmark.3d_rowmajor.js | 149 - benchmark/benchmark.4d_blocked_columnmajor.js | 148 - benchmark/benchmark.4d_blocked_rowmajor.js | 148 - benchmark/benchmark.4d_columnmajor.js | 148 - benchmark/benchmark.4d_rowmajor.js | 148 - benchmark/benchmark.5d_blocked_columnmajor.js | 148 - benchmark/benchmark.5d_blocked_rowmajor.js | 148 - benchmark/benchmark.5d_columnmajor.js | 148 - benchmark/benchmark.5d_rowmajor.js | 148 - benchmark/benchmark.6d_blocked_columnmajor.js | 148 - benchmark/benchmark.6d_blocked_rowmajor.js | 148 - benchmark/benchmark.6d_columnmajor.js | 148 - benchmark/benchmark.6d_rowmajor.js | 148 - benchmark/benchmark.7d_blocked_columnmajor.js | 148 - benchmark/benchmark.7d_blocked_rowmajor.js | 148 - benchmark/benchmark.7d_columnmajor.js | 148 - benchmark/benchmark.7d_rowmajor.js | 148 - benchmark/benchmark.8d_blocked_columnmajor.js | 148 - benchmark/benchmark.8d_blocked_rowmajor.js | 148 - benchmark/benchmark.8d_columnmajor.js | 148 - benchmark/benchmark.8d_rowmajor.js | 148 - benchmark/benchmark.9d_blocked_columnmajor.js | 148 - benchmark/benchmark.9d_blocked_rowmajor.js | 148 - benchmark/benchmark.9d_columnmajor.js | 148 - benchmark/benchmark.9d_rowmajor.js | 148 - branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 19 - dist/index.js.map | 7 - docs/repl.txt | 78 - docs/types/test.ts | 128 - examples/index.js | 50 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/0d.js | 100 - lib/0d_accessors.js | 121 - lib/10d.js | 281 - lib/10d_accessors.js | 306 -- lib/10d_blocked.js | 389 -- lib/10d_blocked_accessors.js | 414 -- lib/1d.js | 129 - lib/1d_accessors.js | 154 - lib/2d.js | 167 - lib/2d_accessors.js | 192 - lib/2d_blocked.js | 195 - lib/2d_blocked_accessors.js | 220 - lib/3d.js | 181 - lib/3d_accessors.js | 206 - lib/3d_blocked.js | 221 - lib/3d_blocked_accessors.js | 246 - lib/4d.js | 195 - lib/4d_accessors.js | 220 - lib/4d_blocked.js | 245 - lib/4d_blocked_accessors.js | 270 - lib/5d.js | 209 - lib/5d_accessors.js | 234 - lib/5d_blocked.js | 269 - lib/5d_blocked_accessors.js | 294 - lib/6d.js | 225 - lib/6d_accessors.js | 250 - lib/6d_blocked.js | 293 - lib/6d_blocked_accessors.js | 318 -- lib/7d.js | 239 - lib/7d_accessors.js | 264 - lib/7d_blocked.js | 317 -- lib/7d_blocked_accessors.js | 342 -- lib/8d.js | 253 - lib/8d_accessors.js | 278 - lib/8d_blocked.js | 341 -- lib/8d_blocked_accessors.js | 366 -- lib/9d.js | 267 - lib/9d_accessors.js | 292 - lib/9d_blocked.js | 365 -- lib/9d_blocked_accessors.js | 390 -- lib/index.js | 81 - lib/main.js | 276 - lib/nd.js | 154 - lib/nd_accessors.js | 179 - package.json | 94 +- stats.html | 4842 +++++++++++++++++ test/dist/test.js | 33 - test/test.0d.js | 89 - test/test.10d.js | 2667 --------- test/test.1d.js | 134 - test/test.2d.js | 1195 ---- test/test.3d.js | 1331 ----- test/test.4d.js | 1503 ----- test/test.5d.js | 1740 ------ test/test.6d.js | 1892 ------- test/test.7d.js | 2099 ------- test/test.8d.js | 2221 -------- test/test.9d.js | 2447 --------- test/test.js | 139 - test/test.nd.js | 822 --- 138 files changed, 4872 insertions(+), 39349 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 .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.10d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.10d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.10d_columnmajor.js delete mode 100644 benchmark/benchmark.10d_rowmajor.js delete mode 100644 benchmark/benchmark.11d_columnmajor.js delete mode 100644 benchmark/benchmark.11d_rowmajor.js delete mode 100644 benchmark/benchmark.1d_columnmajor.js delete mode 100644 benchmark/benchmark.1d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.2d_columnmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors_complex.js delete mode 100644 benchmark/benchmark.3d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.3d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.3d_columnmajor.js delete mode 100644 benchmark/benchmark.3d_rowmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.4d_columnmajor.js delete mode 100644 benchmark/benchmark.4d_rowmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.5d_columnmajor.js delete mode 100644 benchmark/benchmark.5d_rowmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.6d_columnmajor.js delete mode 100644 benchmark/benchmark.6d_rowmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.7d_columnmajor.js delete mode 100644 benchmark/benchmark.7d_rowmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.8d_columnmajor.js delete mode 100644 benchmark/benchmark.8d_rowmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.9d_columnmajor.js delete mode 100644 benchmark/benchmark.9d_rowmajor.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 (97%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/0d.js delete mode 100644 lib/0d_accessors.js delete mode 100644 lib/10d.js delete mode 100644 lib/10d_accessors.js delete mode 100644 lib/10d_blocked.js delete mode 100644 lib/10d_blocked_accessors.js delete mode 100644 lib/1d.js delete mode 100644 lib/1d_accessors.js delete mode 100644 lib/2d.js delete mode 100644 lib/2d_accessors.js delete mode 100644 lib/2d_blocked.js delete mode 100644 lib/2d_blocked_accessors.js delete mode 100644 lib/3d.js delete mode 100644 lib/3d_accessors.js delete mode 100644 lib/3d_blocked.js delete mode 100644 lib/3d_blocked_accessors.js delete mode 100644 lib/4d.js delete mode 100644 lib/4d_accessors.js delete mode 100644 lib/4d_blocked.js delete mode 100644 lib/4d_blocked_accessors.js delete mode 100644 lib/5d.js delete mode 100644 lib/5d_accessors.js delete mode 100644 lib/5d_blocked.js delete mode 100644 lib/5d_blocked_accessors.js delete mode 100644 lib/6d.js delete mode 100644 lib/6d_accessors.js delete mode 100644 lib/6d_blocked.js delete mode 100644 lib/6d_blocked_accessors.js delete mode 100644 lib/7d.js delete mode 100644 lib/7d_accessors.js delete mode 100644 lib/7d_blocked.js delete mode 100644 lib/7d_blocked_accessors.js delete mode 100644 lib/8d.js delete mode 100644 lib/8d_accessors.js delete mode 100644 lib/8d_blocked.js delete mode 100644 lib/8d_blocked_accessors.js delete mode 100644 lib/9d.js delete mode 100644 lib/9d_accessors.js delete mode 100644 lib/9d_blocked.js delete mode 100644 lib/9d_blocked_accessors.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js delete mode 100644 lib/nd.js delete mode 100644 lib/nd_accessors.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.0d.js delete mode 100644 test/test.10d.js delete mode 100644 test/test.1d.js delete mode 100644 test/test.2d.js delete mode 100644 test/test.3d.js delete mode 100644 test/test.4d.js delete mode 100644 test/test.5d.js delete mode 100644 test/test.6d.js delete mode 100644 test/test.7d.js delete mode 100644 test/test.8d.js delete mode 100644 test/test.9d.js delete mode 100644 test/test.js delete mode 100644 test/test.nd.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/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index a1f1421..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/ndarray/base/map) 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 0696b91..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/ndarray/base/map) 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 1c89592..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: '29 17 * * 1' - - # 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 + + ```
@@ -214,7 +205,7 @@ console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); ## 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.10d_blocked_columnmajor.js b/benchmark/benchmark.10d_blocked_columnmajor.js deleted file mode 100644 index d0903eb..0000000 --- a/benchmark/benchmark.10d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_blocked_rowmajor.js b/benchmark/benchmark.10d_blocked_rowmajor.js deleted file mode 100644 index 623a672..0000000 --- a/benchmark/benchmark.10d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_columnmajor.js b/benchmark/benchmark.10d_columnmajor.js deleted file mode 100644 index 3d63c6a..0000000 --- a/benchmark/benchmark.10d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_rowmajor.js b/benchmark/benchmark.10d_rowmajor.js deleted file mode 100644 index 52addf9..0000000 --- a/benchmark/benchmark.10d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_columnmajor.js b/benchmark/benchmark.11d_columnmajor.js deleted file mode 100644 index eeb5347..0000000 --- a/benchmark/benchmark.11d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_rowmajor.js b/benchmark/benchmark.11d_rowmajor.js deleted file mode 100644 index 6d26910..0000000 --- a/benchmark/benchmark.11d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_columnmajor.js b/benchmark/benchmark.1d_columnmajor.js deleted file mode 100644 index 8f6bab0..0000000 --- a/benchmark/benchmark.1d_columnmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_rowmajor.js b/benchmark/benchmark.1d_rowmajor.js deleted file mode 100644 index e626ef1..0000000 --- a/benchmark/benchmark.1d_rowmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_columnmajor.js b/benchmark/benchmark.2d_blocked_columnmajor.js deleted file mode 100644 index c1023b7..0000000 --- a/benchmark/benchmark.2d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_rowmajor.js b/benchmark/benchmark.2d_blocked_rowmajor.js deleted file mode 100644 index 486875c..0000000 --- a/benchmark/benchmark.2d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_columnmajor.js b/benchmark/benchmark.2d_columnmajor.js deleted file mode 100644 index 2337425..0000000 --- a/benchmark/benchmark.2d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor.js b/benchmark/benchmark.2d_rowmajor.js deleted file mode 100644 index 1a3c39c..0000000 --- a/benchmark/benchmark.2d_rowmajor.js +++ /dev/null @@ -1,150 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors.js b/benchmark/benchmark.2d_rowmajor_accessors.js deleted file mode 100644 index f70f8dc..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors.js +++ /dev/null @@ -1,177 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf[ idx ]; -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf[ idx ] = value; -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors_complex.js b/benchmark/benchmark.2d_rowmajor_accessors_complex.js deleted file mode 100644 index aea8f4b..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors_complex.js +++ /dev/null @@ -1,184 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var ctors = require( '@stdlib/array-typed-complex-ctors' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'complex64' ]; -var order = 'row-major'; -var abtype = { - 'complex64': 'float32', - 'complex128': 'float64' -}; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf.get( idx ); -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf.set( value, idx ); -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var xbuf; - var ybuf; - var x; - var y; - - xbuf = filledarrayBy( len*2, abtype[ xtype ], discreteUniform( -100, 100 ) ); // eslint-disable-line max-len - ybuf = filledarray( 0.0, len*2, abtype[ ytype ] ); - x = { - 'dtype': xtype, - 'data': new ( ctors( xtype ) )( xbuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': new ( ctors( ytype ) )( ybuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 5; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_columnmajor.js b/benchmark/benchmark.3d_blocked_columnmajor.js deleted file mode 100644 index 2193d3d..0000000 --- a/benchmark/benchmark.3d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_rowmajor.js b/benchmark/benchmark.3d_blocked_rowmajor.js deleted file mode 100644 index ae68ae6..0000000 --- a/benchmark/benchmark.3d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_columnmajor.js b/benchmark/benchmark.3d_columnmajor.js deleted file mode 100644 index 719ade5..0000000 --- a/benchmark/benchmark.3d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_rowmajor.js b/benchmark/benchmark.3d_rowmajor.js deleted file mode 100644 index 0bbbb40..0000000 --- a/benchmark/benchmark.3d_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_columnmajor.js b/benchmark/benchmark.4d_blocked_columnmajor.js deleted file mode 100644 index ed280cc..0000000 --- a/benchmark/benchmark.4d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_rowmajor.js b/benchmark/benchmark.4d_blocked_rowmajor.js deleted file mode 100644 index ea544a6..0000000 --- a/benchmark/benchmark.4d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_columnmajor.js b/benchmark/benchmark.4d_columnmajor.js deleted file mode 100644 index bc7d32e..0000000 --- a/benchmark/benchmark.4d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_rowmajor.js b/benchmark/benchmark.4d_rowmajor.js deleted file mode 100644 index bd1fb1c..0000000 --- a/benchmark/benchmark.4d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_columnmajor.js b/benchmark/benchmark.5d_blocked_columnmajor.js deleted file mode 100644 index 13f1278..0000000 --- a/benchmark/benchmark.5d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_rowmajor.js b/benchmark/benchmark.5d_blocked_rowmajor.js deleted file mode 100644 index 8e68348..0000000 --- a/benchmark/benchmark.5d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_columnmajor.js b/benchmark/benchmark.5d_columnmajor.js deleted file mode 100644 index d432997..0000000 --- a/benchmark/benchmark.5d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_rowmajor.js b/benchmark/benchmark.5d_rowmajor.js deleted file mode 100644 index 101f685..0000000 --- a/benchmark/benchmark.5d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_columnmajor.js b/benchmark/benchmark.6d_blocked_columnmajor.js deleted file mode 100644 index 6394204..0000000 --- a/benchmark/benchmark.6d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_rowmajor.js b/benchmark/benchmark.6d_blocked_rowmajor.js deleted file mode 100644 index a7c75b2..0000000 --- a/benchmark/benchmark.6d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_columnmajor.js b/benchmark/benchmark.6d_columnmajor.js deleted file mode 100644 index 0788a72..0000000 --- a/benchmark/benchmark.6d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_rowmajor.js b/benchmark/benchmark.6d_rowmajor.js deleted file mode 100644 index 3fa5a61..0000000 --- a/benchmark/benchmark.6d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_columnmajor.js b/benchmark/benchmark.7d_blocked_columnmajor.js deleted file mode 100644 index 9833b60..0000000 --- a/benchmark/benchmark.7d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_rowmajor.js b/benchmark/benchmark.7d_blocked_rowmajor.js deleted file mode 100644 index 6811333..0000000 --- a/benchmark/benchmark.7d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_columnmajor.js b/benchmark/benchmark.7d_columnmajor.js deleted file mode 100644 index be78749..0000000 --- a/benchmark/benchmark.7d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_rowmajor.js b/benchmark/benchmark.7d_rowmajor.js deleted file mode 100644 index 79843a7..0000000 --- a/benchmark/benchmark.7d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_columnmajor.js b/benchmark/benchmark.8d_blocked_columnmajor.js deleted file mode 100644 index eeb2f7c..0000000 --- a/benchmark/benchmark.8d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_rowmajor.js b/benchmark/benchmark.8d_blocked_rowmajor.js deleted file mode 100644 index 1899e0b..0000000 --- a/benchmark/benchmark.8d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_columnmajor.js b/benchmark/benchmark.8d_columnmajor.js deleted file mode 100644 index e6902ea..0000000 --- a/benchmark/benchmark.8d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_rowmajor.js b/benchmark/benchmark.8d_rowmajor.js deleted file mode 100644 index 519c62f..0000000 --- a/benchmark/benchmark.8d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_columnmajor.js b/benchmark/benchmark.9d_blocked_columnmajor.js deleted file mode 100644 index 1579f28..0000000 --- a/benchmark/benchmark.9d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_rowmajor.js b/benchmark/benchmark.9d_blocked_rowmajor.js deleted file mode 100644 index 1b8469f..0000000 --- a/benchmark/benchmark.9d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_columnmajor.js b/benchmark/benchmark.9d_columnmajor.js deleted file mode 100644 index 5039b2f..0000000 --- a/benchmark/benchmark.9d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_rowmajor.js b/benchmark/benchmark.9d_rowmajor.js deleted file mode 100644 index 181f6df..0000000 --- a/benchmark/benchmark.9d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/branches.md b/branches.md deleted file mode 100644 index 458a893..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/ndarray/base/map" -%% click B href "https://github.com/stdlib-js/ndarray-base-map/tree/main" -%% click C href "https://github.com/stdlib-js/ndarray-base-map/tree/production" -%% click D href "https://github.com/stdlib-js/ndarray-base-map/tree/esm" -%% click E href "https://github.com/stdlib-js/ndarray-base-map/tree/deno" -%% click F href "https://github.com/stdlib-js/ndarray-base-map/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/map -[production-url]: https://github.com/stdlib-js/ndarray-base-map/tree/production -[deno-url]: https://github.com/stdlib-js/ndarray-base-map/tree/deno -[deno-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/ndarray-base-map/tree/umd -[umd-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/ndarray-base-map/tree/esm -[esm-readme]: https://github.com/stdlib-js/ndarray-base-map/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 4504e2e..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import map from '../docs/types/index'; -export = map; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index fd5ca5c..0000000 --- a/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict";var ur=function(a,v){return function(){return v||a((v={exports:{}}).exports,v),v.exports}};var Rr=ur(function(Gi,Lr){"use strict";var jv=require("@stdlib/ndarray-base-unary-loop-interchange-order"),mv=require("@stdlib/ndarray-base-unary-tiling-block-size"),kv=require("@stdlib/array-base-take-indexed"),zv=require("@stdlib/array-base-reverse");function gv(a,v,V,Q){var r,X,L,R,K,T,g,M,C,B,_,E,w,S,O,l,j,p,k,o,n,d,y,s,u,e;for(e=jv(a.shape,a.strides,v.strides),w=e.sh,l=e.sx,j=e.sy,B=zv(e.idx),r=mv(a.dtype,v.dtype),p=a.offset,k=v.offset,X=a.data,L=v.data,R=l[0],T=j[0],u=w[1];u>0;)for(u0;)for(s0;)for(t0;)for(x0;)for(c0;)for(I0;)for(D0;)for(b0;)for(z0;)for(N0;)for(F0;)for(H0;)for(U0;)for(J0;)for(ir0;)for(ar0;)for($0;)for(Y0;)for(W0;)for(sr0;)for(tr0;)for(fr0;)for(dr0;)for(or0;)for(er0;)for(vr0;)for(rr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(pr0;)for(Sr0;)for(yr0;)for(tr0;)for(zr0;)for(hr0;)for(br0;)for(mr0;)for(jr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(wr0;)for(Mr0;)for(Er0;)for(Pr0;)for(Tr0;)for(Or0;)for(gr0;)for(zr0;)for(hr0;)for(br0;)for(y0;)for(d0;)for(c0;)for(i0;)for(h0;)for(b0;)for(z0;)for(f0;)for(m0;)for(H0;)for(U0;)for(J0;)for(G0;)for(A0;)for($0;)for(Y0;)for(W0;)for(sr0;)for(Z0;)for(N0;)for(dr0;)for(or0;)for(er0;)for(vr0;)for(rr0;)for(ir0;)for(ar0;)for(lr0;)for(cr0;)for(pr0;)for(Sr0;)for(yr0;)for(tr0;)for(fr0;)for(dr0;)for(br0;)for(mr0;)for(jr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(lr0;)for(cr0;)for(Er0;)for(Pr0;)for(Tr0;)for(Or0;)for(gr0;)for(zr0;)for(hr0;)for(br0;)for(mr0;)for(jr 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder = require( '@stdlib/ndarray-base-iteration-order' );\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' );\nvar blockedaccessormap2d = require( './2d_blocked_accessors.js' );\nvar blockedaccessormap3d = require( './3d_blocked_accessors.js' );\nvar blockedaccessormap4d = require( './4d_blocked_accessors.js' );\nvar blockedaccessormap5d = require( './5d_blocked_accessors.js' );\nvar blockedaccessormap6d = require( './6d_blocked_accessors.js' );\nvar blockedaccessormap7d = require( './7d_blocked_accessors.js' );\nvar blockedaccessormap8d = require( './8d_blocked_accessors.js' );\nvar blockedaccessormap9d = require( './9d_blocked_accessors.js' );\nvar blockedaccessormap10d = require( './10d_blocked_accessors.js' );\nvar blockedmap2d = require( './2d_blocked.js' );\nvar blockedmap3d = require( './3d_blocked.js' );\nvar blockedmap4d = require( './4d_blocked.js' );\nvar blockedmap5d = require( './5d_blocked.js' );\nvar blockedmap6d = require( './6d_blocked.js' );\nvar blockedmap7d = require( './7d_blocked.js' );\nvar blockedmap8d = require( './8d_blocked.js' );\nvar blockedmap9d = require( './9d_blocked.js' );\nvar blockedmap10d = require( './10d_blocked.js' );\nvar accessormap0d = require( './0d_accessors.js' );\nvar accessormap1d = require( './1d_accessors.js' );\nvar accessormap2d = require( './2d_accessors.js' );\nvar accessormap3d = require( './3d_accessors.js' );\nvar accessormap4d = require( './4d_accessors.js' );\nvar accessormap5d = require( './5d_accessors.js' );\nvar accessormap6d = require( './6d_accessors.js' );\nvar accessormap7d = require( './7d_accessors.js' );\nvar accessormap8d = require( './8d_accessors.js' );\nvar accessormap9d = require( './9d_accessors.js' );\nvar accessormap10d = require( './10d_accessors.js' );\nvar accessormapnd = require( './nd_accessors.js' );\nvar map0d = require( './0d.js' );\nvar map1d = require( './1d.js' );\nvar map2d = require( './2d.js' );\nvar map3d = require( './3d.js' );\nvar map4d = require( './4d.js' );\nvar map5d = require( './5d.js' );\nvar map6d = require( './6d.js' );\nvar map7d = require( './7d.js' );\nvar map8d = require( './8d.js' );\nvar map9d = require( './9d.js' );\nvar map10d = require( './10d.js' );\nvar mapnd = require( './nd.js' );\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && strides2order( x.strides ) === strides2order( y.strides ) ) { // eslint-disable-line max-len\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray.\n*\n* @module @stdlib/ndarray-base-map\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var map = require( '@stdlib/ndarray-base-map' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\n\n// MODULES //\n\nvar main = require( './main.js' );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "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", - "names": ["require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "get", "set", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "get", "set", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "set", "get", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_accessors", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d_accessors", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d_accessors", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d_accessors", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "get", "set", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d_accessors", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d_accessors", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d_accessors", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d_accessors", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d_accessors", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d_accessors", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d_accessors", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd_accessors", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "get", "set", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_d", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map2d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map3d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map4d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map5d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map6d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map7d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map8d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map9d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d", "__commonJSMin", "exports", "module", "strides2order", "zeroTo", "reverse", "take", "map10d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_main", "__commonJSMin", "exports", "module", "iterationOrder", "strides2order", "ndarray2object", "blockedaccessormap2d", "blockedaccessormap3d", "blockedaccessormap4d", "blockedaccessormap5d", "blockedaccessormap6d", "blockedaccessormap7d", "blockedaccessormap8d", "blockedaccessormap9d", "blockedaccessormap10d", "blockedmap2d", "blockedmap3d", "blockedmap4d", "blockedmap5d", "blockedmap6d", "blockedmap7d", "blockedmap8d", "blockedmap9d", "blockedmap10d", "accessormap0d", "accessormap1d", "accessormap2d", "accessormap3d", "accessormap4d", "accessormap5d", "accessormap6d", "accessormap7d", "accessormap8d", "accessormap9d", "accessormap10d", "accessormapnd", "map0d", "map1d", "map2d", "map3d", "map4d", "map5d", "map6d", "map7d", "map8d", "map9d", "map10d", "mapnd", "MAP", "ACCESSOR_MAP", "BLOCKED_MAP", "BLOCKED_ACCESSOR_MAP", "MAX_DIMS", "map", "arrays", "fcn", "thisArg", "ndims", "shx", "shy", "iox", "ioy", "len", "x", "y", "i", "d", "main"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index be30da1..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,78 +0,0 @@ - -{{alias}}( arrays, fcn[, thisArg] ) - Applies a callback function to elements in an input ndarray and assigns - results to elements in an output ndarray. - - Each provided "ndarray" should be an object with following properties: - - - dtype: data type. - - data: data buffer. - - shape: dimensions. - - strides: stride lengths. - - offset: index offset. - - order: specifies whether an ndarray is row-major (C-style) or column-major - (Fortran-style). - - The callback function is provided the following arguments: - - - value: current array element. - - indices: current array element indices. - - arr: the input ndarray. - - Parameters - ---------- - arrays: ArrayLikeObject - Array-like object containing one input ndarray and one output ndarray. - - fcn: Function - Callback function. - - thisArg: any (optional) - Callback function execution context. - - Examples - -------- - // Define ndarray data and meta data... - > var xbuf = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ybuf = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] ); - > var dtype = 'float64'; - > var shape = [ 2, 2 ]; - > var sx = [ 2, 1 ]; - > var sy = [ 2, 1 ]; - > var ox = 0; - > var oy = 0; - > var order = 'row-major'; - - // Define a callback function: - > function f( v ) { return v*10.0; }; - - // Using ndarrays... - > var x = {{alias:@stdlib/ndarray/ctor}}( dtype, xbuf, shape, sx, ox, order ); - > var y = {{alias:@stdlib/ndarray/ctor}}( dtype, ybuf, shape, sy, oy, order ); - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - // Using minimal ndarray-like objects... - > x = { - ... 'dtype': dtype, - ... 'data': xbuf, - ... 'shape': shape, - ... 'strides': sx, - ... 'offset': ox, - ... 'order': order - ... }; - > y = { - ... 'dtype': dtype, - ... 'data': ybuf, - ... 'shape': shape, - ... 'strides': sy, - ... 'offset': oy, - ... 'order': order - ... }; - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - See Also - -------- diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 320d548..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/// - -import { ndarray } from '@stdlib/types/ndarray'; -import map = require( './index' ); - -/** -* Mock function to create an ndarray-like object. -* -* @returns ndarray-like object -*/ -function array(): ndarray { - const obj: ndarray = { - 'byteLength': 80, - 'BYTES_PER_ELEMENT': 8, - 'data': new Float64Array( 10 ), - 'dtype': 'float64', - 'flags': { - 'ROW_MAJOR_CONTIGUOUS': true, - 'COLUMN_MAJOR_CONTIGUOUS': false - }, - 'length': 10, - 'ndims': 1, - 'offset': 0, - 'order': 'row-major', - 'shape': [ 10 ], - 'strides': [ 1 ], - 'get': (): number => 0, - 'set': (): ndarray => obj - }; - return obj; -} - -/** -* Evaluates the identity function. -* -* @param x - input value -* @returns input value -*/ -function identity( x: number ): number { - return x; -} - -// TESTS // - -// The function returns `undefined`... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, identity ); // $ExpectType void - map( arrays, identity, {} ); // $ExpectType void -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object containing ndarray-like objects... -{ - map( 5, identity ); // $ExpectError - map( true, identity ); // $ExpectError - map( false, identity ); // $ExpectError - map( null, identity ); // $ExpectError - map( undefined, identity ); // $ExpectError - map( {}, identity ); // $ExpectError - map( [ 1 ], identity ); // $ExpectError - map( ( x: number ): number => x, identity ); // $ExpectError - - map( 5, identity, {} ); // $ExpectError - map( true, identity, {} ); // $ExpectError - map( false, identity, {} ); // $ExpectError - map( null, identity, {} ); // $ExpectError - map( undefined, identity, {} ); // $ExpectError - map( {}, identity, {} ); // $ExpectError - map( [ 1 ], identity, {} ); // $ExpectError - map( ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a callback function... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, '10' ); // $ExpectError - map( arrays, 5 ); // $ExpectError - map( arrays, true ); // $ExpectError - map( arrays, false ); // $ExpectError - map( arrays, null ); // $ExpectError - map( arrays, undefined ); // $ExpectError - map( arrays, [] ); // $ExpectError - map( arrays, {} ); // $ExpectError - - map( arrays, '10', {} ); // $ExpectError - map( arrays, 5, {} ); // $ExpectError - map( arrays, true, {} ); // $ExpectError - map( arrays, false, {} ); // $ExpectError - map( arrays, null, {} ); // $ExpectError - map( arrays, undefined, {} ); // $ExpectError - map( arrays, [], {} ); // $ExpectError - map( arrays, {}, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map(); // $ExpectError - map( arrays ); // $ExpectError{ - map( arrays, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index d89ee00..0000000 --- a/examples/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var ndarray2array = require( '@stdlib/ndarray-base-to-array' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var map = require( './../lib' ); - -var N = 10; -var x = { - 'dtype': 'generic', - 'data': filledarrayBy( N, 'generic', discreteUniform( -100, 100 ) ), - 'shape': [ 5, 2 ], - 'strides': [ 2, 1 ], - 'offset': 0, - 'order': 'row-major' -}; -var y = { - 'dtype': 'generic', - 'data': filledarray( 0, N, 'generic' ), - 'shape': x.shape.slice(), - 'strides': shape2strides( x.shape, 'column-major' ), - 'offset': 0, - 'order': 'column-major' -}; - -map( [ x, y ], naryFunction( abs, 1 ) ); -console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); -console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 97% rename from docs/types/index.d.ts rename to index.d.ts index 78ac9b8..9dd6ef1 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -18,7 +18,7 @@ // TypeScript Version: 4.1 -/// +/// import { ArrayLike } from '@stdlib/types/array'; import { typedndarray } from '@stdlib/types/ndarray'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..b6a38f6 --- /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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-strides2order@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-strides2order@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@v0.2.1-esm/index.mjs";import v from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import m from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import y from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@v0.2.2-esm/index.mjs";var u="throw";var x="throw";var j=[function(r,s,f,o){s.data[s.offset]=f.call(o,r.data[r.offset],[],r.ref)},function(r,s,f,o){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=s.strides[0],c=r.offset,n=s.offset,e=r.data,t=s.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(xr0;)for(ur0;)for(yr0;)for(mr0;)for(vr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(yr0;)for(mr0;)for(vr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && strides2order( x.strides ) === strides2order( y.strides ) ) { // eslint-disable-line max-len\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","strides2order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","ordx","ordy","numel","order","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/lib/0d.js b/lib/0d.js deleted file mode 100644 index f19e08f..0000000 --- a/lib/0d.js +++ /dev/null @@ -1,100 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ){ -* return z * 10.0; -* } -* -* // Create a data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0 ] ); -* var ybuf = new Float64Array( 1 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offset: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like object: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* } -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0 ] -*/ -function map0d( x, y, fcn, thisArg ) { - y.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref ); -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/0d_accessors.js b/lib/0d_accessors.js deleted file mode 100644 index 0ce37b7..0000000 --- a/lib/0d_accessors.js +++ /dev/null @@ -1,121 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var ybuf = new Complex64Array( 2 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 30.0 -* -* var im = imagf( v ); -* // returns 40.0 -*/ -function map0d( x, y, fcn, thisArg ) { - y.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/10d.js b/lib/10d.js deleted file mode 100644 index 92c58bf..0000000 --- a/lib/10d.js +++ /dev/null @@ -1,281 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_accessors.js b/lib/10d_accessors.js deleted file mode 100644 index 44e15a0..0000000 --- a/lib/10d_accessors.js +++ /dev/null @@ -1,306 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_blocked.js b/lib/10d_blocked.js deleted file mode 100644 index 05863d6..0000000 --- a/lib/10d_blocked.js +++ /dev/null @@ -1,389 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/10d_blocked_accessors.js b/lib/10d_blocked_accessors.js deleted file mode 100644 index af78894..0000000 --- a/lib/10d_blocked_accessors.js +++ /dev/null @@ -1,414 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/1d.js b/lib/1d.js deleted file mode 100644 index b5f0220..0000000 --- a/lib/1d.js +++ /dev/null @@ -1,129 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 2 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 40.0, 60.0, 80.0 ] -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/1d_accessors.js b/lib/1d_accessors.js deleted file mode 100644 index b98015f..0000000 --- a/lib/1d_accessors.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 1 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/2d.js b/lib/2d.js deleted file mode 100644 index 3f420df..0000000 --- a/lib/2d.js +++ /dev/null @@ -1,167 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_accessors.js b/lib/2d_accessors.js deleted file mode 100644 index b38d1e0..0000000 --- a/lib/2d_accessors.js +++ /dev/null @@ -1,192 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map2d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_blocked.js b/lib/2d_blocked.js deleted file mode 100644 index 9803bb4..0000000 --- a/lib/2d_blocked.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/2d_blocked_accessors.js b/lib/2d_blocked_accessors.js deleted file mode 100644 index 08e5eb7..0000000 --- a/lib/2d_blocked_accessors.js +++ /dev/null @@ -1,220 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/3d.js b/lib/3d.js deleted file mode 100644 index 6ebc592..0000000 --- a/lib/3d.js +++ /dev/null @@ -1,181 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_accessors.js b/lib/3d_accessors.js deleted file mode 100644 index e71dbc9..0000000 --- a/lib/3d_accessors.js +++ /dev/null @@ -1,206 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 2, 1 ]; -* var sy = [ 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map3d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var get; - var set; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_blocked.js b/lib/3d_blocked.js deleted file mode 100644 index d15d04c..0000000 --- a/lib/3d_blocked.js +++ /dev/null @@ -1,221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/3d_blocked_accessors.js b/lib/3d_blocked_accessors.js deleted file mode 100644 index 551417b..0000000 --- a/lib/3d_blocked_accessors.js +++ /dev/null @@ -1,246 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 2, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/4d.js b/lib/4d.js deleted file mode 100644 index 2be6641..0000000 --- a/lib/4d.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_accessors.js b/lib/4d_accessors.js deleted file mode 100644 index 0a1fbab..0000000 --- a/lib/4d_accessors.js +++ /dev/null @@ -1,220 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map4d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_blocked.js b/lib/4d_blocked.js deleted file mode 100644 index 2b62030..0000000 --- a/lib/4d_blocked.js +++ /dev/null @@ -1,245 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/4d_blocked_accessors.js b/lib/4d_blocked_accessors.js deleted file mode 100644 index fe56f55..0000000 --- a/lib/4d_blocked_accessors.js +++ /dev/null @@ -1,270 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/5d.js b/lib/5d.js deleted file mode 100644 index bbb3b39..0000000 --- a/lib/5d.js +++ /dev/null @@ -1,209 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_accessors.js b/lib/5d_accessors.js deleted file mode 100644 index 5dfce2c..0000000 --- a/lib/5d_accessors.js +++ /dev/null @@ -1,234 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map5d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_blocked.js b/lib/5d_blocked.js deleted file mode 100644 index 7162107..0000000 --- a/lib/5d_blocked.js +++ /dev/null @@ -1,269 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/5d_blocked_accessors.js b/lib/5d_blocked_accessors.js deleted file mode 100644 index 4a0a880..0000000 --- a/lib/5d_blocked_accessors.js +++ /dev/null @@ -1,294 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/6d.js b/lib/6d.js deleted file mode 100644 index 19fe893..0000000 --- a/lib/6d.js +++ /dev/null @@ -1,225 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map6d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_accessors.js b/lib/6d_accessors.js deleted file mode 100644 index 151a22b..0000000 --- a/lib/6d_accessors.js +++ /dev/null @@ -1,250 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_blocked.js b/lib/6d_blocked.js deleted file mode 100644 index e850edb..0000000 --- a/lib/6d_blocked.js +++ /dev/null @@ -1,293 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/6d_blocked_accessors.js b/lib/6d_blocked_accessors.js deleted file mode 100644 index 1acf143..0000000 --- a/lib/6d_blocked_accessors.js +++ /dev/null @@ -1,318 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var set; - var get; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/7d.js b/lib/7d.js deleted file mode 100644 index b6ece5e..0000000 --- a/lib/7d.js +++ /dev/null @@ -1,239 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_accessors.js b/lib/7d_accessors.js deleted file mode 100644 index a52e593..0000000 --- a/lib/7d_accessors.js +++ /dev/null @@ -1,264 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_blocked.js b/lib/7d_blocked.js deleted file mode 100644 index 1b6ce95..0000000 --- a/lib/7d_blocked.js +++ /dev/null @@ -1,317 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/7d_blocked_accessors.js b/lib/7d_blocked_accessors.js deleted file mode 100644 index 52537bc..0000000 --- a/lib/7d_blocked_accessors.js +++ /dev/null @@ -1,342 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/8d.js b/lib/8d.js deleted file mode 100644 index 82b2ed4..0000000 --- a/lib/8d.js +++ /dev/null @@ -1,253 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_accessors.js b/lib/8d_accessors.js deleted file mode 100644 index 7ac40ea..0000000 --- a/lib/8d_accessors.js +++ /dev/null @@ -1,278 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_blocked.js b/lib/8d_blocked.js deleted file mode 100644 index a52ab49..0000000 --- a/lib/8d_blocked.js +++ /dev/null @@ -1,341 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/8d_blocked_accessors.js b/lib/8d_blocked_accessors.js deleted file mode 100644 index e40b718..0000000 --- a/lib/8d_blocked_accessors.js +++ /dev/null @@ -1,366 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/9d.js b/lib/9d.js deleted file mode 100644 index 3dd8c58..0000000 --- a/lib/9d.js +++ /dev/null @@ -1,267 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_accessors.js b/lib/9d_accessors.js deleted file mode 100644 index 090d111..0000000 --- a/lib/9d_accessors.js +++ /dev/null @@ -1,292 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( strides2order( sx ) === 1 ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_blocked.js b/lib/9d_blocked.js deleted file mode 100644 index 4440ee8..0000000 --- a/lib/9d_blocked.js +++ /dev/null @@ -1,365 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/9d_blocked_accessors.js b/lib/9d_blocked_accessors.js deleted file mode 100644 index 5998505..0000000 --- a/lib/9d_blocked_accessors.js +++ /dev/null @@ -1,390 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 80cf80e..0000000 --- a/lib/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray. -* -* @module @stdlib/ndarray-base-map -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var map = require( '@stdlib/ndarray-base-map' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 78cfe0f..0000000 --- a/lib/main.js +++ /dev/null @@ -1,276 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var iterationOrder = require( '@stdlib/ndarray-base-iteration-order' ); -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' ); -var blockedaccessormap2d = require( './2d_blocked_accessors.js' ); -var blockedaccessormap3d = require( './3d_blocked_accessors.js' ); -var blockedaccessormap4d = require( './4d_blocked_accessors.js' ); -var blockedaccessormap5d = require( './5d_blocked_accessors.js' ); -var blockedaccessormap6d = require( './6d_blocked_accessors.js' ); -var blockedaccessormap7d = require( './7d_blocked_accessors.js' ); -var blockedaccessormap8d = require( './8d_blocked_accessors.js' ); -var blockedaccessormap9d = require( './9d_blocked_accessors.js' ); -var blockedaccessormap10d = require( './10d_blocked_accessors.js' ); -var blockedmap2d = require( './2d_blocked.js' ); -var blockedmap3d = require( './3d_blocked.js' ); -var blockedmap4d = require( './4d_blocked.js' ); -var blockedmap5d = require( './5d_blocked.js' ); -var blockedmap6d = require( './6d_blocked.js' ); -var blockedmap7d = require( './7d_blocked.js' ); -var blockedmap8d = require( './8d_blocked.js' ); -var blockedmap9d = require( './9d_blocked.js' ); -var blockedmap10d = require( './10d_blocked.js' ); -var accessormap0d = require( './0d_accessors.js' ); -var accessormap1d = require( './1d_accessors.js' ); -var accessormap2d = require( './2d_accessors.js' ); -var accessormap3d = require( './3d_accessors.js' ); -var accessormap4d = require( './4d_accessors.js' ); -var accessormap5d = require( './5d_accessors.js' ); -var accessormap6d = require( './6d_accessors.js' ); -var accessormap7d = require( './7d_accessors.js' ); -var accessormap8d = require( './8d_accessors.js' ); -var accessormap9d = require( './9d_accessors.js' ); -var accessormap10d = require( './10d_accessors.js' ); -var accessormapnd = require( './nd_accessors.js' ); -var map0d = require( './0d.js' ); -var map1d = require( './1d.js' ); -var map2d = require( './2d.js' ); -var map3d = require( './3d.js' ); -var map4d = require( './4d.js' ); -var map5d = require( './5d.js' ); -var map6d = require( './6d.js' ); -var map7d = require( './7d.js' ); -var map8d = require( './8d.js' ); -var map9d = require( './9d.js' ); -var map10d = require( './10d.js' ); -var mapnd = require( './nd.js' ); - - -// VARIABLES // - -var MAP = [ - map0d, - map1d, - map2d, - map3d, - map4d, - map5d, - map6d, - map7d, - map8d, - map9d, - map10d -]; -var ACCESSOR_MAP = [ - accessormap0d, - accessormap1d, - accessormap2d, - accessormap3d, - accessormap4d, - accessormap5d, - accessormap6d, - accessormap7d, - accessormap8d, - accessormap9d, - accessormap10d -]; -var BLOCKED_MAP = [ - blockedmap2d, // 0 - blockedmap3d, - blockedmap4d, - blockedmap5d, - blockedmap6d, - blockedmap7d, - blockedmap8d, - blockedmap9d, - blockedmap10d // 8 -]; -var BLOCKED_ACCESSOR_MAP = [ - blockedaccessormap2d, // 0 - blockedaccessormap3d, - blockedaccessormap4d, - blockedaccessormap5d, - blockedaccessormap6d, - blockedaccessormap7d, - blockedaccessormap8d, - blockedaccessormap9d, - blockedaccessormap10d // 8 -]; -var MAX_DIMS = MAP.length -1; - - -// MAIN // - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* ## Notes -* -* - Each provided ndarray should be an `object` with the following properties: -* -* - **dtype**: data type. -* - **data**: data buffer. -* - **shape**: dimensions. -* - **strides**: stride lengths. -* - **offset**: index offset. -* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style). -* -* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array -* @param {Callback} fcn - callback function -* @param {*} [thisArg] - callback execution context -* @throws {Error} arrays must have the same number of dimensions -* @throws {Error} arrays must have the same shape -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map( arrays, fcn, thisArg ) { - var ndims; - var shx; - var shy; - var iox; - var ioy; - var len; - var x; - var y; - var i; - var d; - - // Unpack the ndarrays and standardize ndarray meta data: - x = ndarray2object( arrays[ 0 ] ); - y = ndarray2object( arrays[ 1 ] ); - - // Verify that the input and output arrays have the same number of dimensions... - shx = x.shape; - shy = y.shape; - ndims = shx.length; - if ( ndims !== shy.length ) { - throw new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' ); - } - // Determine whether we can avoid iteration altogether... - if ( ndims === 0 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Verify that the input and output arrays have the same dimensions... - len = 1; // number of elements - for ( i = 0; i < ndims; i++ ) { - d = shx[ i ]; - if ( d !== shy[ i ] ) { - throw new Error( 'invalid arguments. Array must have the same shape.' ); - } - // Note that, if one of the dimensions is `0`, the length will be `0`... - len *= d; - } - // Check whether we were provided empty ndarrays... - if ( len === 0 ) { - return; - } - // Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays... - if ( ndims === 1 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Determine iteration order: - iox = iterationOrder( x.strides ); // +/-1 - ioy = iterationOrder( y.strides ); // +/-1 - - // Determine whether we can avoid blocked iteration... - if ( iox !== 0 && ioy !== 0 && strides2order( x.strides ) === strides2order( y.strides ) ) { // eslint-disable-line max-len - // Determine whether we can use simple nested loops... - if ( ndims <= MAX_DIMS ) { - // So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration... - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Fall-through to blocked iteration... - } - // Determine whether we can perform blocked iteration... - if ( ndims <= MAX_DIMS ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - return BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - // Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)... - if ( x.accessorProtocol || y.accessorProtocol ) { - return accessormapnd( x, y, fcn, thisArg ); - } - mapnd( x, y, fcn, thisArg ); -} - - -// EXPORTS // - -module.exports = map; diff --git a/lib/nd.js b/lib/nd.js deleted file mode 100644 index 379d56e..0000000 --- a/lib/nd.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/lib/nd_accessors.js b/lib/nd_accessors.js deleted file mode 100644 index a28998b..0000000 --- a/lib/nd_accessors.js +++ /dev/null @@ -1,179 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var get; - var set; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/package.json b/package.json index 5182ef8..c1b688b 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Apply a callback to elements in an input ndarray and assign results to elements in an output ndarray.", "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,70 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-reverse": "^0.2.2", - "@stdlib/array-base-take-indexed": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/ndarray-base-ind2sub": "^0.2.2", - "@stdlib/ndarray-base-iteration-order": "^0.2.2", - "@stdlib/ndarray-base-ndarraylike2object": "^0.2.2", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-strides2order": "^0.2.2", - "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", - "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-complex128": "^0.3.0", - "@stdlib/array-filled": "^0.2.1", - "@stdlib/array-filled-by": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/array-ones": "^0.2.1", - "@stdlib/array-typed-complex-ctors": "^0.2.2", - "@stdlib/array-zeros": "^0.2.2", - "@stdlib/assert-is-same-complex128array": "^0.2.2", - "@stdlib/assert-is-same-float64array": "^0.2.2", - "@stdlib/blas-ext-base-dfill": "^0.2.2", - "@stdlib/blas-ext-base-gfill": "^0.2.1", - "@stdlib/complex-float64-ctor": "^0.0.3", - "@stdlib/complex-float64-imag": "^0.1.1", - "@stdlib/complex-float64-real": "^0.1.1", - "@stdlib/math-base-assert-is-nan": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/math-base-special-cbrt": "^0.2.2", - "@stdlib/math-base-special-floor": "^0.2.3", - "@stdlib/math-base-special-pow": "^0.3.0", - "@stdlib/math-base-special-sqrt": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-strides2offset": "^0.2.2", - "@stdlib/ndarray-base-to-array": "^0.2.1", - "@stdlib/ndarray-ctor": "^0.2.2", - "@stdlib/ndarray-from-scalar": "^0.2.1", - "@stdlib/number-float64-base-identity": "github:stdlib-js/number-float64-base-identity#main", - "@stdlib/random-base-discrete-uniform": "^0.2.1", - "@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", "base", @@ -113,9 +26,8 @@ "transform", "for-each" ], - "__stdlib__": {}, "funding": { "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..d2bc373 --- /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.0d.js b/test/test.0d.js deleted file mode 100644 index 1648cc8..0000000 --- a/test/test.0d.js +++ /dev/null @@ -1,89 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var scalar2ndarray = require( '@stdlib/ndarray-from-scalar' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( 1.0, { - 'dtype': 'float64' - }); - y = scalar2ndarray( 0.0, { - 'dtype': 'float64' - }); - - map( [ x, y ], scale ); - - expected = new Float64Array( [ 10.0 ] ); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( new Complex128( 1.0, 1.0 ), { - 'dtype': 'complex128' - }); - y = scalar2ndarray( new Complex128( 0.0, 0.0 ), { - 'dtype': 'complex128' - }); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ 10.0, 10.0 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.10d.js b/test/test.10d.js deleted file mode 100644 index 74b3998..0000000 --- a/test/test.10d.js +++ /dev/null @@ -1,2667 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -1, -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.1d.js b/test/test.1d.js deleted file mode 100644 index 21e0604..0000000 --- a/test/test.1d.js +++ /dev/null @@ -1,134 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (empty array)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'complex128', ones( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - y = ndarray( 'complex128', zeros( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.2d.js b/test/test.2d.js deleted file mode 100644 index 3e94e94..0000000 --- a/test/test.2d.js +++ /dev/null @@ -1,1195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( x.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.3d.js b/test/test.3d.js deleted file mode 100644 index 07f7516..0000000 --- a/test/test.3d.js +++ /dev/null @@ -1,1331 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ bsize*8, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 2 ]; - st = [ -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ -bsize*8, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ -1, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 2 ]; - st = [ -1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.4d.js b/test/test.4d.js deleted file mode 100644 index 8864e09..0000000 --- a/test/test.4d.js +++ /dev/null @@ -1,1503 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ -2, -2, -1, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ bsize*8, bsize*4, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ bsize*8, bsize*4, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ -bsize*4, bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2 ]; - st = [ -bsize*4, bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ 2, 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ 2, 2, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 1, 2 ]; - st = [ 2, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1 ]; - st = [ 1, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ 2, 4, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*4 ]; - st = [ 2, 4, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.5d.js b/test/test.5d.js deleted file mode 100644 index 16f3119..0000000 --- a/test/test.5d.js +++ /dev/null @@ -1,1740 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -8, -4, -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ -2, 4, -bsize*8, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, 4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ -2, 4, -4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1 ]; - st = [ -2, 4, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, -4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ 2, 4, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.6d.js b/test/test.6d.js deleted file mode 100644 index 41fef40..0000000 --- a/test/test.6d.js +++ /dev/null @@ -1,1892 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, -16, 8, -4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, -4, -4, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.7d.js b/test/test.7d.js deleted file mode 100644 index 8a3a7fe..0000000 --- a/test/test.7d.js +++ /dev/null @@ -1,2099 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, 8, -4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 1, 2 ]; - st = [ bsize*16, -8, 8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -8, -8, -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, -8, 4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ bsize*16, -8, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*16, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 2, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, bsize*8, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 2, 1 ]; - st = [ 2, -4, bsize*8, bsize*8, -bsize*16, bsize*16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 1, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, -2, 4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, -bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.8d.js b/test/test.8d.js deleted file mode 100644 index 2dc6333..0000000 --- a/test/test.8d.js +++ /dev/null @@ -1,2221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, -16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, 16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.9d.js b/test/test.9d.js deleted file mode 100644 index 2a38c2e..0000000 --- a/test/test.9d.js +++ /dev/null @@ -1,2447 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 5512e2c..0000000 --- a/test/test.js +++ /dev/null @@ -1,139 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same number of dimensions', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2 ] ], - [ [ 2, 2 ], [ 2, 2, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ], - [ [ 2, 2, 1, 2 ], [ 2, 1, 2 ] ], - [ [ 1, 1, 4, 2, 2, 2 ], [ 10, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same shape', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2, 2 ] ], - [ [ 3, 3 ], [ 2, 2 ] ], - [ [ 5, 5, 5 ], [ 5, 5, 4 ] ], - [ [ 1, 1, 1 ], [ 2, 2, 2 ] ], - [ [ 1, 4, 1, 2, 2 ], [ 3, 8 ] ], - [ [ 10, 2, 1 ], [ 1, 2, 10 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); diff --git a/test/test.nd.js b/test/test.nd.js deleted file mode 100644 index 9e4b18d..0000000 --- a/test/test.nd.js +++ /dev/null @@ -1,822 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset(sh, st); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); From a548917a2cf62d02bc68432591cdc6fcc0cabcb8 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 8 May 2025 05:41:43 +0000 Subject: [PATCH 24/32] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index af54f1b..5182ef8 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,8 @@ "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3" + "@stdlib/types": "^0.4.3", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-complex128": "^0.3.0", @@ -117,4 +118,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From afba332b4b3dcdf9b0d4016eca46ddbae40ba498 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 8 May 2025 05:42:11 +0000 Subject: [PATCH 25/32] Remove files --- index.d.ts | 117 -- index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 4964 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 9dd6ef1..0000000 --- a/index.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { ArrayLike } from '@stdlib/types/array'; -import { typedndarray } from '@stdlib/types/ndarray'; - -/** -* Callback invoked for each ndarray element. -* -* @returns output value -*/ -type Nullary = ( this: V ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @returns output value -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @returns output value -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Ternary = ( this: V, value: T, indices: Array, arr: typedndarray ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Callback = Nullary | Unary | Binary | Ternary; - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* @param arrays - array-like object containing one input ndarray and one output ndarray -* @param fcn - callback function -* @param thisArg - callback function execution context -* @throws arrays must have the same number of dimensions -* @throws arrays must have the same shape -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var ndarray = require( '@stdlib/ndarray-ctor' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarrays: -* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' ); -* var y = ndarray( 'float64', ybuf, shape, sy, oy, 'row-major' ); -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -declare function map( arrays: ArrayLike>, fcn: Callback, thisArg?: ThisParameterType> ): void; - - -// EXPORTS // - -export = map; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index b6a38f6..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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-strides2order@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-strides2order@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@v0.2.1-esm/index.mjs";import v from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@v0.2.2-esm/index.mjs";import m from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@v0.2.2-esm/index.mjs";import y from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@v0.2.2-esm/index.mjs";var u="throw";var x="throw";var j=[function(r,s,f,o){s.data[s.offset]=f.call(o,r.data[r.offset],[],r.ref)},function(r,s,f,o){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=s.strides[0],c=r.offset,n=s.offset,e=r.data,t=s.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(xr0;)for(ur0;)for(yr0;)for(mr0;)for(vr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(yr0;)for(mr0;)for(vr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tif ( iox !== 0 && ioy !== 0 && strides2order( x.strides ) === strides2order( y.strides ) ) { // eslint-disable-line max-len\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( strides2order( sx ) === 1 ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","strides2order","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","ordx","ordy","numel","order","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index d2bc373..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From e65c23b12f9f62688ce26b89886fa3b93a8a65c5 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Thu, 8 May 2025 05:43:14 +0000 Subject: [PATCH 26/32] Auto-generated commit --- .editorconfig | 180 - .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 - .github/workflows/test_published_package.yml | 105 - .gitignore | 194 - .npmignore | 229 - .npmrc | 31 - CHANGELOG.md | 72 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 51 +- SECURITY.md | 5 - .../benchmark.10d_blocked_columnmajor.js | 148 - benchmark/benchmark.10d_blocked_rowmajor.js | 148 - benchmark/benchmark.10d_columnmajor.js | 148 - benchmark/benchmark.10d_rowmajor.js | 148 - benchmark/benchmark.11d_columnmajor.js | 148 - benchmark/benchmark.11d_rowmajor.js | 148 - benchmark/benchmark.1d_columnmajor.js | 137 - benchmark/benchmark.1d_rowmajor.js | 137 - benchmark/benchmark.2d_blocked_columnmajor.js | 149 - benchmark/benchmark.2d_blocked_rowmajor.js | 149 - benchmark/benchmark.2d_columnmajor.js | 149 - benchmark/benchmark.2d_rowmajor.js | 150 - benchmark/benchmark.2d_rowmajor_accessors.js | 177 - ...benchmark.2d_rowmajor_accessors_complex.js | 184 - benchmark/benchmark.3d_blocked_columnmajor.js | 149 - benchmark/benchmark.3d_blocked_rowmajor.js | 149 - benchmark/benchmark.3d_columnmajor.js | 149 - benchmark/benchmark.3d_rowmajor.js | 149 - benchmark/benchmark.4d_blocked_columnmajor.js | 148 - benchmark/benchmark.4d_blocked_rowmajor.js | 148 - benchmark/benchmark.4d_columnmajor.js | 148 - benchmark/benchmark.4d_rowmajor.js | 148 - benchmark/benchmark.5d_blocked_columnmajor.js | 148 - benchmark/benchmark.5d_blocked_rowmajor.js | 148 - benchmark/benchmark.5d_columnmajor.js | 148 - benchmark/benchmark.5d_rowmajor.js | 148 - benchmark/benchmark.6d_blocked_columnmajor.js | 148 - benchmark/benchmark.6d_blocked_rowmajor.js | 148 - benchmark/benchmark.6d_columnmajor.js | 148 - benchmark/benchmark.6d_rowmajor.js | 148 - benchmark/benchmark.7d_blocked_columnmajor.js | 148 - benchmark/benchmark.7d_blocked_rowmajor.js | 148 - benchmark/benchmark.7d_columnmajor.js | 148 - benchmark/benchmark.7d_rowmajor.js | 148 - benchmark/benchmark.8d_blocked_columnmajor.js | 148 - benchmark/benchmark.8d_blocked_rowmajor.js | 148 - benchmark/benchmark.8d_columnmajor.js | 148 - benchmark/benchmark.8d_rowmajor.js | 148 - benchmark/benchmark.9d_blocked_columnmajor.js | 148 - benchmark/benchmark.9d_blocked_rowmajor.js | 148 - benchmark/benchmark.9d_columnmajor.js | 148 - benchmark/benchmark.9d_rowmajor.js | 148 - branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 19 - dist/index.js.map | 7 - docs/repl.txt | 78 - docs/types/test.ts | 128 - examples/index.js | 50 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/0d.js | 100 - lib/0d_accessors.js | 121 - lib/10d.js | 281 - lib/10d_accessors.js | 308 -- lib/10d_blocked.js | 389 -- lib/10d_blocked_accessors.js | 416 -- lib/1d.js | 129 - lib/1d_accessors.js | 156 - lib/2d.js | 167 - lib/2d_accessors.js | 194 - lib/2d_blocked.js | 195 - lib/2d_blocked_accessors.js | 222 - lib/3d.js | 181 - lib/3d_accessors.js | 208 - lib/3d_blocked.js | 221 - lib/3d_blocked_accessors.js | 248 - lib/4d.js | 195 - lib/4d_accessors.js | 222 - lib/4d_blocked.js | 245 - lib/4d_blocked_accessors.js | 272 - lib/5d.js | 209 - lib/5d_accessors.js | 236 - lib/5d_blocked.js | 269 - lib/5d_blocked_accessors.js | 296 - lib/6d.js | 225 - lib/6d_accessors.js | 252 - lib/6d_blocked.js | 293 - lib/6d_blocked_accessors.js | 320 -- lib/7d.js | 239 - lib/7d_accessors.js | 266 - lib/7d_blocked.js | 317 -- lib/7d_blocked_accessors.js | 344 -- lib/8d.js | 253 - lib/8d_accessors.js | 280 - lib/8d_blocked.js | 341 -- lib/8d_blocked_accessors.js | 368 -- lib/9d.js | 267 - lib/9d_accessors.js | 294 - lib/9d_blocked.js | 365 -- lib/9d_blocked_accessors.js | 392 -- lib/index.js | 81 - lib/main.js | 278 - lib/nd.js | 154 - lib/nd_accessors.js | 181 - package.json | 94 +- stats.html | 4842 +++++++++++++++++ test/dist/test.js | 33 - test/test.0d.js | 89 - test/test.10d.js | 2667 --------- test/test.1d.js | 134 - test/test.2d.js | 1195 ---- test/test.3d.js | 1331 ----- test/test.4d.js | 1503 ----- test/test.5d.js | 1740 ------ test/test.6d.js | 1892 ------- test/test.7d.js | 2099 ------- test/test.8d.js | 2221 -------- test/test.9d.js | 2447 --------- test/test.js | 139 - test/test.nd.js | 822 --- 138 files changed, 4872 insertions(+), 39393 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 .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.10d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.10d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.10d_columnmajor.js delete mode 100644 benchmark/benchmark.10d_rowmajor.js delete mode 100644 benchmark/benchmark.11d_columnmajor.js delete mode 100644 benchmark/benchmark.11d_rowmajor.js delete mode 100644 benchmark/benchmark.1d_columnmajor.js delete mode 100644 benchmark/benchmark.1d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.2d_columnmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors_complex.js delete mode 100644 benchmark/benchmark.3d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.3d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.3d_columnmajor.js delete mode 100644 benchmark/benchmark.3d_rowmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.4d_columnmajor.js delete mode 100644 benchmark/benchmark.4d_rowmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.5d_columnmajor.js delete mode 100644 benchmark/benchmark.5d_rowmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.6d_columnmajor.js delete mode 100644 benchmark/benchmark.6d_rowmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.7d_columnmajor.js delete mode 100644 benchmark/benchmark.7d_rowmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.8d_columnmajor.js delete mode 100644 benchmark/benchmark.8d_rowmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.9d_columnmajor.js delete mode 100644 benchmark/benchmark.9d_rowmajor.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 (97%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/0d.js delete mode 100644 lib/0d_accessors.js delete mode 100644 lib/10d.js delete mode 100644 lib/10d_accessors.js delete mode 100644 lib/10d_blocked.js delete mode 100644 lib/10d_blocked_accessors.js delete mode 100644 lib/1d.js delete mode 100644 lib/1d_accessors.js delete mode 100644 lib/2d.js delete mode 100644 lib/2d_accessors.js delete mode 100644 lib/2d_blocked.js delete mode 100644 lib/2d_blocked_accessors.js delete mode 100644 lib/3d.js delete mode 100644 lib/3d_accessors.js delete mode 100644 lib/3d_blocked.js delete mode 100644 lib/3d_blocked_accessors.js delete mode 100644 lib/4d.js delete mode 100644 lib/4d_accessors.js delete mode 100644 lib/4d_blocked.js delete mode 100644 lib/4d_blocked_accessors.js delete mode 100644 lib/5d.js delete mode 100644 lib/5d_accessors.js delete mode 100644 lib/5d_blocked.js delete mode 100644 lib/5d_blocked_accessors.js delete mode 100644 lib/6d.js delete mode 100644 lib/6d_accessors.js delete mode 100644 lib/6d_blocked.js delete mode 100644 lib/6d_blocked_accessors.js delete mode 100644 lib/7d.js delete mode 100644 lib/7d_accessors.js delete mode 100644 lib/7d_blocked.js delete mode 100644 lib/7d_blocked_accessors.js delete mode 100644 lib/8d.js delete mode 100644 lib/8d_accessors.js delete mode 100644 lib/8d_blocked.js delete mode 100644 lib/8d_blocked_accessors.js delete mode 100644 lib/9d.js delete mode 100644 lib/9d_accessors.js delete mode 100644 lib/9d_blocked.js delete mode 100644 lib/9d_blocked_accessors.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js delete mode 100644 lib/nd.js delete mode 100644 lib/nd_accessors.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.0d.js delete mode 100644 test/test.10d.js delete mode 100644 test/test.1d.js delete mode 100644 test/test.2d.js delete mode 100644 test/test.3d.js delete mode 100644 test/test.4d.js delete mode 100644 test/test.5d.js delete mode 100644 test/test.6d.js delete mode 100644 test/test.7d.js delete mode 100644 test/test.8d.js delete mode 100644 test/test.9d.js delete mode 100644 test/test.js delete mode 100644 test/test.nd.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/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index a1f1421..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/ndarray/base/map) 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 0696b91..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/ndarray/base/map) 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 1c89592..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: '29 17 * * 1' - - # 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 + + ```
@@ -214,7 +205,7 @@ console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); ## 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.10d_blocked_columnmajor.js b/benchmark/benchmark.10d_blocked_columnmajor.js deleted file mode 100644 index d0903eb..0000000 --- a/benchmark/benchmark.10d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_blocked_rowmajor.js b/benchmark/benchmark.10d_blocked_rowmajor.js deleted file mode 100644 index 623a672..0000000 --- a/benchmark/benchmark.10d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_columnmajor.js b/benchmark/benchmark.10d_columnmajor.js deleted file mode 100644 index 3d63c6a..0000000 --- a/benchmark/benchmark.10d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_rowmajor.js b/benchmark/benchmark.10d_rowmajor.js deleted file mode 100644 index 52addf9..0000000 --- a/benchmark/benchmark.10d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_columnmajor.js b/benchmark/benchmark.11d_columnmajor.js deleted file mode 100644 index eeb5347..0000000 --- a/benchmark/benchmark.11d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_rowmajor.js b/benchmark/benchmark.11d_rowmajor.js deleted file mode 100644 index 6d26910..0000000 --- a/benchmark/benchmark.11d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_columnmajor.js b/benchmark/benchmark.1d_columnmajor.js deleted file mode 100644 index 8f6bab0..0000000 --- a/benchmark/benchmark.1d_columnmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_rowmajor.js b/benchmark/benchmark.1d_rowmajor.js deleted file mode 100644 index e626ef1..0000000 --- a/benchmark/benchmark.1d_rowmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_columnmajor.js b/benchmark/benchmark.2d_blocked_columnmajor.js deleted file mode 100644 index c1023b7..0000000 --- a/benchmark/benchmark.2d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_rowmajor.js b/benchmark/benchmark.2d_blocked_rowmajor.js deleted file mode 100644 index 486875c..0000000 --- a/benchmark/benchmark.2d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_columnmajor.js b/benchmark/benchmark.2d_columnmajor.js deleted file mode 100644 index 2337425..0000000 --- a/benchmark/benchmark.2d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor.js b/benchmark/benchmark.2d_rowmajor.js deleted file mode 100644 index 1a3c39c..0000000 --- a/benchmark/benchmark.2d_rowmajor.js +++ /dev/null @@ -1,150 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors.js b/benchmark/benchmark.2d_rowmajor_accessors.js deleted file mode 100644 index f70f8dc..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors.js +++ /dev/null @@ -1,177 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf[ idx ]; -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf[ idx ] = value; -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors_complex.js b/benchmark/benchmark.2d_rowmajor_accessors_complex.js deleted file mode 100644 index aea8f4b..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors_complex.js +++ /dev/null @@ -1,184 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var ctors = require( '@stdlib/array-typed-complex-ctors' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'complex64' ]; -var order = 'row-major'; -var abtype = { - 'complex64': 'float32', - 'complex128': 'float64' -}; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf.get( idx ); -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf.set( value, idx ); -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var xbuf; - var ybuf; - var x; - var y; - - xbuf = filledarrayBy( len*2, abtype[ xtype ], discreteUniform( -100, 100 ) ); // eslint-disable-line max-len - ybuf = filledarray( 0.0, len*2, abtype[ ytype ] ); - x = { - 'dtype': xtype, - 'data': new ( ctors( xtype ) )( xbuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': new ( ctors( ytype ) )( ybuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 5; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_columnmajor.js b/benchmark/benchmark.3d_blocked_columnmajor.js deleted file mode 100644 index 2193d3d..0000000 --- a/benchmark/benchmark.3d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_rowmajor.js b/benchmark/benchmark.3d_blocked_rowmajor.js deleted file mode 100644 index ae68ae6..0000000 --- a/benchmark/benchmark.3d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_columnmajor.js b/benchmark/benchmark.3d_columnmajor.js deleted file mode 100644 index 719ade5..0000000 --- a/benchmark/benchmark.3d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_rowmajor.js b/benchmark/benchmark.3d_rowmajor.js deleted file mode 100644 index 0bbbb40..0000000 --- a/benchmark/benchmark.3d_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_columnmajor.js b/benchmark/benchmark.4d_blocked_columnmajor.js deleted file mode 100644 index ed280cc..0000000 --- a/benchmark/benchmark.4d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_rowmajor.js b/benchmark/benchmark.4d_blocked_rowmajor.js deleted file mode 100644 index ea544a6..0000000 --- a/benchmark/benchmark.4d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_columnmajor.js b/benchmark/benchmark.4d_columnmajor.js deleted file mode 100644 index bc7d32e..0000000 --- a/benchmark/benchmark.4d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_rowmajor.js b/benchmark/benchmark.4d_rowmajor.js deleted file mode 100644 index bd1fb1c..0000000 --- a/benchmark/benchmark.4d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_columnmajor.js b/benchmark/benchmark.5d_blocked_columnmajor.js deleted file mode 100644 index 13f1278..0000000 --- a/benchmark/benchmark.5d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_rowmajor.js b/benchmark/benchmark.5d_blocked_rowmajor.js deleted file mode 100644 index 8e68348..0000000 --- a/benchmark/benchmark.5d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_columnmajor.js b/benchmark/benchmark.5d_columnmajor.js deleted file mode 100644 index d432997..0000000 --- a/benchmark/benchmark.5d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_rowmajor.js b/benchmark/benchmark.5d_rowmajor.js deleted file mode 100644 index 101f685..0000000 --- a/benchmark/benchmark.5d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_columnmajor.js b/benchmark/benchmark.6d_blocked_columnmajor.js deleted file mode 100644 index 6394204..0000000 --- a/benchmark/benchmark.6d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_rowmajor.js b/benchmark/benchmark.6d_blocked_rowmajor.js deleted file mode 100644 index a7c75b2..0000000 --- a/benchmark/benchmark.6d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_columnmajor.js b/benchmark/benchmark.6d_columnmajor.js deleted file mode 100644 index 0788a72..0000000 --- a/benchmark/benchmark.6d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_rowmajor.js b/benchmark/benchmark.6d_rowmajor.js deleted file mode 100644 index 3fa5a61..0000000 --- a/benchmark/benchmark.6d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_columnmajor.js b/benchmark/benchmark.7d_blocked_columnmajor.js deleted file mode 100644 index 9833b60..0000000 --- a/benchmark/benchmark.7d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_rowmajor.js b/benchmark/benchmark.7d_blocked_rowmajor.js deleted file mode 100644 index 6811333..0000000 --- a/benchmark/benchmark.7d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_columnmajor.js b/benchmark/benchmark.7d_columnmajor.js deleted file mode 100644 index be78749..0000000 --- a/benchmark/benchmark.7d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_rowmajor.js b/benchmark/benchmark.7d_rowmajor.js deleted file mode 100644 index 79843a7..0000000 --- a/benchmark/benchmark.7d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_columnmajor.js b/benchmark/benchmark.8d_blocked_columnmajor.js deleted file mode 100644 index eeb2f7c..0000000 --- a/benchmark/benchmark.8d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_rowmajor.js b/benchmark/benchmark.8d_blocked_rowmajor.js deleted file mode 100644 index 1899e0b..0000000 --- a/benchmark/benchmark.8d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_columnmajor.js b/benchmark/benchmark.8d_columnmajor.js deleted file mode 100644 index e6902ea..0000000 --- a/benchmark/benchmark.8d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_rowmajor.js b/benchmark/benchmark.8d_rowmajor.js deleted file mode 100644 index 519c62f..0000000 --- a/benchmark/benchmark.8d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_columnmajor.js b/benchmark/benchmark.9d_blocked_columnmajor.js deleted file mode 100644 index 1579f28..0000000 --- a/benchmark/benchmark.9d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_rowmajor.js b/benchmark/benchmark.9d_blocked_rowmajor.js deleted file mode 100644 index 1b8469f..0000000 --- a/benchmark/benchmark.9d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_columnmajor.js b/benchmark/benchmark.9d_columnmajor.js deleted file mode 100644 index 5039b2f..0000000 --- a/benchmark/benchmark.9d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_rowmajor.js b/benchmark/benchmark.9d_rowmajor.js deleted file mode 100644 index 181f6df..0000000 --- a/benchmark/benchmark.9d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/branches.md b/branches.md deleted file mode 100644 index 458a893..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/ndarray/base/map" -%% click B href "https://github.com/stdlib-js/ndarray-base-map/tree/main" -%% click C href "https://github.com/stdlib-js/ndarray-base-map/tree/production" -%% click D href "https://github.com/stdlib-js/ndarray-base-map/tree/esm" -%% click E href "https://github.com/stdlib-js/ndarray-base-map/tree/deno" -%% click F href "https://github.com/stdlib-js/ndarray-base-map/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/map -[production-url]: https://github.com/stdlib-js/ndarray-base-map/tree/production -[deno-url]: https://github.com/stdlib-js/ndarray-base-map/tree/deno -[deno-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/ndarray-base-map/tree/umd -[umd-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/ndarray-base-map/tree/esm -[esm-readme]: https://github.com/stdlib-js/ndarray-base-map/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 4504e2e..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import map from '../docs/types/index'; -export = map; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index cf4eb02..0000000 --- a/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict";var xr=function(a,v){return function(){return v||a((v={exports:{}}).exports,v),v.exports}};var Rr=xr(function(g0,Lr){"use strict";var jv=require("@stdlib/ndarray-base-unary-loop-interchange-order"),mv=require("@stdlib/ndarray-base-unary-tiling-block-size"),kv=require("@stdlib/array-base-take-indexed"),zv=require("@stdlib/array-base-reverse");function gv(a,v,Y,U){var r,X,A,R,L,B,P,T,D,C,K,_,w,E,n,O,q,m,u,k,o,S,d,f,s,l;for(l=jv(a.shape,a.strides,v.strides),w=l.sh,O=l.sx,q=l.sy,C=zv(l.idx),r=mv(a.dtype,v.dtype),m=a.offset,u=v.offset,X=a.data,A=v.data,R=O[0],B=q[0],s=w[1];s>0;)for(s0;)for(f0;)for(b0;)for(c0;)for(i0;)for(z0;)for(M0;)for(j0;)for(t0;)for(N0;)for(G0;)for(H0;)for(Q0;)for(J0;)for(ir0;)for(ar0;)for($0;)for(Z0;)for(V0;)for(sr0;)for(tr0;)for(fr0;)for(dr0;)for(or0;)for(er0;)for(vr0;)for(rr0;)for(qr0;)for(ur0;)for(lr0;)for(cr0;)for(pr0;)for(Sr0;)for(yr0;)for(tr0;)for(zr0;)for(hr0;)for(br0;)for(mr0;)for(jr0;)for(kr0;)for(nr0;)for(qr0;)for(ur0;)for(wr0;)for(Mr0;)for(Er0;)for(Pr0;)for(Tr0;)for(Or0;)for(gr0;)for(zr0;)for(hr0;)for(br0;)for(d0;)for(S0;)for(i0;)for(x0;)for(h0;)for(j0;)for(t0;)for(p0;)for(g0;)for(H0;)for(Q0;)for(J0;)for(I0;)for(F0;)for($0;)for(Z0;)for(V0;)for(sr0;)for(W0;)for(N0;)for(dr0;)for(or0;)for(er0;)for(vr0;)for(rr0;)for(ir0;)for(ar0;)for(lr0;)for(cr0;)for(pr0;)for(Sr0;)for(yr0;)for(tr0;)for(fr0;)for(dr0;)for(br0;)for(mr0;)for(jr0;)for(kr0;)for(nr0;)for(qr0;)for(ur0;)for(lr0;)for(cr0;)for(Er0;)for(Pr0;)for(Tr0;)for(Or0;)for(gr0;)for(zr0;)for(hr0;)for(br0;)for(mr0;)for(jr} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder = require( '@stdlib/ndarray-base-iteration-order' );\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' );\nvar blockedaccessormap2d = require( './2d_blocked_accessors.js' );\nvar blockedaccessormap3d = require( './3d_blocked_accessors.js' );\nvar blockedaccessormap4d = require( './4d_blocked_accessors.js' );\nvar blockedaccessormap5d = require( './5d_blocked_accessors.js' );\nvar blockedaccessormap6d = require( './6d_blocked_accessors.js' );\nvar blockedaccessormap7d = require( './7d_blocked_accessors.js' );\nvar blockedaccessormap8d = require( './8d_blocked_accessors.js' );\nvar blockedaccessormap9d = require( './9d_blocked_accessors.js' );\nvar blockedaccessormap10d = require( './10d_blocked_accessors.js' );\nvar blockedmap2d = require( './2d_blocked.js' );\nvar blockedmap3d = require( './3d_blocked.js' );\nvar blockedmap4d = require( './4d_blocked.js' );\nvar blockedmap5d = require( './5d_blocked.js' );\nvar blockedmap6d = require( './6d_blocked.js' );\nvar blockedmap7d = require( './7d_blocked.js' );\nvar blockedmap8d = require( './8d_blocked.js' );\nvar blockedmap9d = require( './9d_blocked.js' );\nvar blockedmap10d = require( './10d_blocked.js' );\nvar accessormap0d = require( './0d_accessors.js' );\nvar accessormap1d = require( './1d_accessors.js' );\nvar accessormap2d = require( './2d_accessors.js' );\nvar accessormap3d = require( './3d_accessors.js' );\nvar accessormap4d = require( './4d_accessors.js' );\nvar accessormap5d = require( './5d_accessors.js' );\nvar accessormap6d = require( './6d_accessors.js' );\nvar accessormap7d = require( './7d_accessors.js' );\nvar accessormap8d = require( './8d_accessors.js' );\nvar accessormap9d = require( './9d_accessors.js' );\nvar accessormap10d = require( './10d_accessors.js' );\nvar accessormapnd = require( './nd_accessors.js' );\nvar map0d = require( './0d.js' );\nvar map1d = require( './1d.js' );\nvar map2d = require( './2d.js' );\nvar map3d = require( './3d.js' );\nvar map4d = require( './4d.js' );\nvar map5d = require( './5d.js' );\nvar map6d = require( './6d.js' );\nvar map7d = require( './7d.js' );\nvar map8d = require( './8d.js' );\nvar map9d = require( './9d.js' );\nvar map10d = require( './10d.js' );\nvar mapnd = require( './nd.js' );\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar ord;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tord = strides2order( x.strides );\n\tif ( iox !== 0 && ioy !== 0 && ord === strides2order( y.strides ) ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, ord, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, ord, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray.\n*\n* @module @stdlib/ndarray-base-map\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var map = require( '@stdlib/ndarray-base-map' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\n\n// MODULES //\n\nvar main = require( './main.js' );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "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", - "names": ["require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "get", "set", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "get", "set", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "set", "get", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_accessors", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d_accessors", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "get", "set", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd_accessors", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "get", "set", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_d", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_main", "__commonJSMin", "exports", "module", "iterationOrder", "strides2order", "ndarray2object", "blockedaccessormap2d", "blockedaccessormap3d", "blockedaccessormap4d", "blockedaccessormap5d", "blockedaccessormap6d", "blockedaccessormap7d", "blockedaccessormap8d", "blockedaccessormap9d", "blockedaccessormap10d", "blockedmap2d", "blockedmap3d", "blockedmap4d", "blockedmap5d", "blockedmap6d", "blockedmap7d", "blockedmap8d", "blockedmap9d", "blockedmap10d", "accessormap0d", "accessormap1d", "accessormap2d", "accessormap3d", "accessormap4d", "accessormap5d", "accessormap6d", "accessormap7d", "accessormap8d", "accessormap9d", "accessormap10d", "accessormapnd", "map0d", "map1d", "map2d", "map3d", "map4d", "map5d", "map6d", "map7d", "map8d", "map9d", "map10d", "mapnd", "MAP", "ACCESSOR_MAP", "BLOCKED_MAP", "BLOCKED_ACCESSOR_MAP", "MAX_DIMS", "map", "arrays", "fcn", "thisArg", "ndims", "shx", "shy", "iox", "ioy", "len", "ord", "x", "y", "i", "d", "main"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index be30da1..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,78 +0,0 @@ - -{{alias}}( arrays, fcn[, thisArg] ) - Applies a callback function to elements in an input ndarray and assigns - results to elements in an output ndarray. - - Each provided "ndarray" should be an object with following properties: - - - dtype: data type. - - data: data buffer. - - shape: dimensions. - - strides: stride lengths. - - offset: index offset. - - order: specifies whether an ndarray is row-major (C-style) or column-major - (Fortran-style). - - The callback function is provided the following arguments: - - - value: current array element. - - indices: current array element indices. - - arr: the input ndarray. - - Parameters - ---------- - arrays: ArrayLikeObject - Array-like object containing one input ndarray and one output ndarray. - - fcn: Function - Callback function. - - thisArg: any (optional) - Callback function execution context. - - Examples - -------- - // Define ndarray data and meta data... - > var xbuf = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ybuf = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] ); - > var dtype = 'float64'; - > var shape = [ 2, 2 ]; - > var sx = [ 2, 1 ]; - > var sy = [ 2, 1 ]; - > var ox = 0; - > var oy = 0; - > var order = 'row-major'; - - // Define a callback function: - > function f( v ) { return v*10.0; }; - - // Using ndarrays... - > var x = {{alias:@stdlib/ndarray/ctor}}( dtype, xbuf, shape, sx, ox, order ); - > var y = {{alias:@stdlib/ndarray/ctor}}( dtype, ybuf, shape, sy, oy, order ); - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - // Using minimal ndarray-like objects... - > x = { - ... 'dtype': dtype, - ... 'data': xbuf, - ... 'shape': shape, - ... 'strides': sx, - ... 'offset': ox, - ... 'order': order - ... }; - > y = { - ... 'dtype': dtype, - ... 'data': ybuf, - ... 'shape': shape, - ... 'strides': sy, - ... 'offset': oy, - ... 'order': order - ... }; - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - See Also - -------- diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 320d548..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/// - -import { ndarray } from '@stdlib/types/ndarray'; -import map = require( './index' ); - -/** -* Mock function to create an ndarray-like object. -* -* @returns ndarray-like object -*/ -function array(): ndarray { - const obj: ndarray = { - 'byteLength': 80, - 'BYTES_PER_ELEMENT': 8, - 'data': new Float64Array( 10 ), - 'dtype': 'float64', - 'flags': { - 'ROW_MAJOR_CONTIGUOUS': true, - 'COLUMN_MAJOR_CONTIGUOUS': false - }, - 'length': 10, - 'ndims': 1, - 'offset': 0, - 'order': 'row-major', - 'shape': [ 10 ], - 'strides': [ 1 ], - 'get': (): number => 0, - 'set': (): ndarray => obj - }; - return obj; -} - -/** -* Evaluates the identity function. -* -* @param x - input value -* @returns input value -*/ -function identity( x: number ): number { - return x; -} - -// TESTS // - -// The function returns `undefined`... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, identity ); // $ExpectType void - map( arrays, identity, {} ); // $ExpectType void -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object containing ndarray-like objects... -{ - map( 5, identity ); // $ExpectError - map( true, identity ); // $ExpectError - map( false, identity ); // $ExpectError - map( null, identity ); // $ExpectError - map( undefined, identity ); // $ExpectError - map( {}, identity ); // $ExpectError - map( [ 1 ], identity ); // $ExpectError - map( ( x: number ): number => x, identity ); // $ExpectError - - map( 5, identity, {} ); // $ExpectError - map( true, identity, {} ); // $ExpectError - map( false, identity, {} ); // $ExpectError - map( null, identity, {} ); // $ExpectError - map( undefined, identity, {} ); // $ExpectError - map( {}, identity, {} ); // $ExpectError - map( [ 1 ], identity, {} ); // $ExpectError - map( ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a callback function... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, '10' ); // $ExpectError - map( arrays, 5 ); // $ExpectError - map( arrays, true ); // $ExpectError - map( arrays, false ); // $ExpectError - map( arrays, null ); // $ExpectError - map( arrays, undefined ); // $ExpectError - map( arrays, [] ); // $ExpectError - map( arrays, {} ); // $ExpectError - - map( arrays, '10', {} ); // $ExpectError - map( arrays, 5, {} ); // $ExpectError - map( arrays, true, {} ); // $ExpectError - map( arrays, false, {} ); // $ExpectError - map( arrays, null, {} ); // $ExpectError - map( arrays, undefined, {} ); // $ExpectError - map( arrays, [], {} ); // $ExpectError - map( arrays, {}, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map(); // $ExpectError - map( arrays ); // $ExpectError{ - map( arrays, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index d89ee00..0000000 --- a/examples/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var ndarray2array = require( '@stdlib/ndarray-base-to-array' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var map = require( './../lib' ); - -var N = 10; -var x = { - 'dtype': 'generic', - 'data': filledarrayBy( N, 'generic', discreteUniform( -100, 100 ) ), - 'shape': [ 5, 2 ], - 'strides': [ 2, 1 ], - 'offset': 0, - 'order': 'row-major' -}; -var y = { - 'dtype': 'generic', - 'data': filledarray( 0, N, 'generic' ), - 'shape': x.shape.slice(), - 'strides': shape2strides( x.shape, 'column-major' ), - 'offset': 0, - 'order': 'column-major' -}; - -map( [ x, y ], naryFunction( abs, 1 ) ); -console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); -console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 97% rename from docs/types/index.d.ts rename to index.d.ts index 78ac9b8..9dd6ef1 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -18,7 +18,7 @@ // TypeScript Version: 4.1 -/// +/// import { ArrayLike } from '@stdlib/types/array'; import { typedndarray } from '@stdlib/types/ndarray'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..1dad978 --- /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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-strides2order@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import y from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var v="throw";var m="throw";var u=[function(r,s,f,o){s.data[s.offset]=f.call(o,r.data[r.offset],[],r.ref)},function(r,s,f,o){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=s.strides[0],c=r.offset,n=s.offset,e=r.data,t=s.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(xr0;)for(ur0;)for(mr0;)for(vr0;)for(yr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(mr0;)for(vr0;)for(yr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind from '@stdlib/ndarray-base-vind2bind';\nimport ind2sub from '@stdlib/ndarray-base-ind2sub';\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar ord;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tord = strides2order( x.strides );\n\tif ( iox !== 0 && ioy !== 0 && ord === strides2order( y.strides ) ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, ord, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, ord, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","isRowMajor","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","ord","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","strides2order","ordx","ordy","numel","order","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/lib/0d.js b/lib/0d.js deleted file mode 100644 index f19e08f..0000000 --- a/lib/0d.js +++ /dev/null @@ -1,100 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ){ -* return z * 10.0; -* } -* -* // Create a data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0 ] ); -* var ybuf = new Float64Array( 1 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offset: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like object: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* } -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0 ] -*/ -function map0d( x, y, fcn, thisArg ) { - y.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref ); -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/0d_accessors.js b/lib/0d_accessors.js deleted file mode 100644 index 0ce37b7..0000000 --- a/lib/0d_accessors.js +++ /dev/null @@ -1,121 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var ybuf = new Complex64Array( 2 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 30.0 -* -* var im = imagf( v ); -* // returns 40.0 -*/ -function map0d( x, y, fcn, thisArg ) { - y.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/10d.js b/lib/10d.js deleted file mode 100644 index 40921fb..0000000 --- a/lib/10d.js +++ /dev/null @@ -1,281 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map10d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_accessors.js b/lib/10d_accessors.js deleted file mode 100644 index 9719f80..0000000 --- a/lib/10d_accessors.js +++ /dev/null @@ -1,308 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map10d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_blocked.js b/lib/10d_blocked.js deleted file mode 100644 index 05863d6..0000000 --- a/lib/10d_blocked.js +++ /dev/null @@ -1,389 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/10d_blocked_accessors.js b/lib/10d_blocked_accessors.js deleted file mode 100644 index f86cfeb..0000000 --- a/lib/10d_blocked_accessors.js +++ /dev/null @@ -1,416 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/1d.js b/lib/1d.js deleted file mode 100644 index b5f0220..0000000 --- a/lib/1d.js +++ /dev/null @@ -1,129 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 2 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 40.0, 60.0, 80.0 ] -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/1d_accessors.js b/lib/1d_accessors.js deleted file mode 100644 index e977a57..0000000 --- a/lib/1d_accessors.js +++ /dev/null @@ -1,156 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 1 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/2d.js b/lib/2d.js deleted file mode 100644 index f648532..0000000 --- a/lib/2d.js +++ /dev/null @@ -1,167 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map2d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function map2d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_accessors.js b/lib/2d_accessors.js deleted file mode 100644 index 8468f7a..0000000 --- a/lib/2d_accessors.js +++ /dev/null @@ -1,194 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map2d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map2d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_blocked.js b/lib/2d_blocked.js deleted file mode 100644 index 9803bb4..0000000 --- a/lib/2d_blocked.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/2d_blocked_accessors.js b/lib/2d_blocked_accessors.js deleted file mode 100644 index 6d16254..0000000 --- a/lib/2d_blocked_accessors.js +++ /dev/null @@ -1,222 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/3d.js b/lib/3d.js deleted file mode 100644 index 64d2b03..0000000 --- a/lib/3d.js +++ /dev/null @@ -1,181 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map3d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map3d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_accessors.js b/lib/3d_accessors.js deleted file mode 100644 index 5b2c781..0000000 --- a/lib/3d_accessors.js +++ /dev/null @@ -1,208 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 2, 1 ]; -* var sy = [ 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map3d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map3d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var get; - var set; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_blocked.js b/lib/3d_blocked.js deleted file mode 100644 index d15d04c..0000000 --- a/lib/3d_blocked.js +++ /dev/null @@ -1,221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/3d_blocked_accessors.js b/lib/3d_blocked_accessors.js deleted file mode 100644 index 3dee9d8..0000000 --- a/lib/3d_blocked_accessors.js +++ /dev/null @@ -1,248 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 2, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/4d.js b/lib/4d.js deleted file mode 100644 index e890063..0000000 --- a/lib/4d.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map4d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map4d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_accessors.js b/lib/4d_accessors.js deleted file mode 100644 index 6a9229d..0000000 --- a/lib/4d_accessors.js +++ /dev/null @@ -1,222 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map4d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map4d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_blocked.js b/lib/4d_blocked.js deleted file mode 100644 index 2b62030..0000000 --- a/lib/4d_blocked.js +++ /dev/null @@ -1,245 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/4d_blocked_accessors.js b/lib/4d_blocked_accessors.js deleted file mode 100644 index 5c77cde..0000000 --- a/lib/4d_blocked_accessors.js +++ /dev/null @@ -1,272 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/5d.js b/lib/5d.js deleted file mode 100644 index 48262e6..0000000 --- a/lib/5d.js +++ /dev/null @@ -1,209 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map5d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map5d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_accessors.js b/lib/5d_accessors.js deleted file mode 100644 index f678ec9..0000000 --- a/lib/5d_accessors.js +++ /dev/null @@ -1,236 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map5d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map5d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_blocked.js b/lib/5d_blocked.js deleted file mode 100644 index 7162107..0000000 --- a/lib/5d_blocked.js +++ /dev/null @@ -1,269 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/5d_blocked_accessors.js b/lib/5d_blocked_accessors.js deleted file mode 100644 index 1df3404..0000000 --- a/lib/5d_blocked_accessors.js +++ /dev/null @@ -1,296 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/6d.js b/lib/6d.js deleted file mode 100644 index 118b2f8..0000000 --- a/lib/6d.js +++ /dev/null @@ -1,225 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map6d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map6d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_accessors.js b/lib/6d_accessors.js deleted file mode 100644 index edf42be..0000000 --- a/lib/6d_accessors.js +++ /dev/null @@ -1,252 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map6d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map6d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_blocked.js b/lib/6d_blocked.js deleted file mode 100644 index e850edb..0000000 --- a/lib/6d_blocked.js +++ /dev/null @@ -1,293 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/6d_blocked_accessors.js b/lib/6d_blocked_accessors.js deleted file mode 100644 index aee4f27..0000000 --- a/lib/6d_blocked_accessors.js +++ /dev/null @@ -1,320 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var set; - var get; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/7d.js b/lib/7d.js deleted file mode 100644 index 9b68de0..0000000 --- a/lib/7d.js +++ /dev/null @@ -1,239 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map7d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_accessors.js b/lib/7d_accessors.js deleted file mode 100644 index 709514b..0000000 --- a/lib/7d_accessors.js +++ /dev/null @@ -1,266 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map7d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_blocked.js b/lib/7d_blocked.js deleted file mode 100644 index 1b6ce95..0000000 --- a/lib/7d_blocked.js +++ /dev/null @@ -1,317 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/7d_blocked_accessors.js b/lib/7d_blocked_accessors.js deleted file mode 100644 index 1e315fd..0000000 --- a/lib/7d_blocked_accessors.js +++ /dev/null @@ -1,344 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/8d.js b/lib/8d.js deleted file mode 100644 index d5f2e9c..0000000 --- a/lib/8d.js +++ /dev/null @@ -1,253 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map8d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_accessors.js b/lib/8d_accessors.js deleted file mode 100644 index ff223bb..0000000 --- a/lib/8d_accessors.js +++ /dev/null @@ -1,280 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map8d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_blocked.js b/lib/8d_blocked.js deleted file mode 100644 index a52ab49..0000000 --- a/lib/8d_blocked.js +++ /dev/null @@ -1,341 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/8d_blocked_accessors.js b/lib/8d_blocked_accessors.js deleted file mode 100644 index 5f8fb1f..0000000 --- a/lib/8d_blocked_accessors.js +++ /dev/null @@ -1,368 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/9d.js b/lib/9d.js deleted file mode 100644 index 64118ca..0000000 --- a/lib/9d.js +++ /dev/null @@ -1,267 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map9d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_accessors.js b/lib/9d_accessors.js deleted file mode 100644 index 1d5db89..0000000 --- a/lib/9d_accessors.js +++ /dev/null @@ -1,294 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map9d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_blocked.js b/lib/9d_blocked.js deleted file mode 100644 index 4440ee8..0000000 --- a/lib/9d_blocked.js +++ /dev/null @@ -1,365 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/9d_blocked_accessors.js b/lib/9d_blocked_accessors.js deleted file mode 100644 index 74c6b23..0000000 --- a/lib/9d_blocked_accessors.js +++ /dev/null @@ -1,392 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 80cf80e..0000000 --- a/lib/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray. -* -* @module @stdlib/ndarray-base-map -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var map = require( '@stdlib/ndarray-base-map' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 30ce0c6..0000000 --- a/lib/main.js +++ /dev/null @@ -1,278 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var iterationOrder = require( '@stdlib/ndarray-base-iteration-order' ); -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' ); -var blockedaccessormap2d = require( './2d_blocked_accessors.js' ); -var blockedaccessormap3d = require( './3d_blocked_accessors.js' ); -var blockedaccessormap4d = require( './4d_blocked_accessors.js' ); -var blockedaccessormap5d = require( './5d_blocked_accessors.js' ); -var blockedaccessormap6d = require( './6d_blocked_accessors.js' ); -var blockedaccessormap7d = require( './7d_blocked_accessors.js' ); -var blockedaccessormap8d = require( './8d_blocked_accessors.js' ); -var blockedaccessormap9d = require( './9d_blocked_accessors.js' ); -var blockedaccessormap10d = require( './10d_blocked_accessors.js' ); -var blockedmap2d = require( './2d_blocked.js' ); -var blockedmap3d = require( './3d_blocked.js' ); -var blockedmap4d = require( './4d_blocked.js' ); -var blockedmap5d = require( './5d_blocked.js' ); -var blockedmap6d = require( './6d_blocked.js' ); -var blockedmap7d = require( './7d_blocked.js' ); -var blockedmap8d = require( './8d_blocked.js' ); -var blockedmap9d = require( './9d_blocked.js' ); -var blockedmap10d = require( './10d_blocked.js' ); -var accessormap0d = require( './0d_accessors.js' ); -var accessormap1d = require( './1d_accessors.js' ); -var accessormap2d = require( './2d_accessors.js' ); -var accessormap3d = require( './3d_accessors.js' ); -var accessormap4d = require( './4d_accessors.js' ); -var accessormap5d = require( './5d_accessors.js' ); -var accessormap6d = require( './6d_accessors.js' ); -var accessormap7d = require( './7d_accessors.js' ); -var accessormap8d = require( './8d_accessors.js' ); -var accessormap9d = require( './9d_accessors.js' ); -var accessormap10d = require( './10d_accessors.js' ); -var accessormapnd = require( './nd_accessors.js' ); -var map0d = require( './0d.js' ); -var map1d = require( './1d.js' ); -var map2d = require( './2d.js' ); -var map3d = require( './3d.js' ); -var map4d = require( './4d.js' ); -var map5d = require( './5d.js' ); -var map6d = require( './6d.js' ); -var map7d = require( './7d.js' ); -var map8d = require( './8d.js' ); -var map9d = require( './9d.js' ); -var map10d = require( './10d.js' ); -var mapnd = require( './nd.js' ); - - -// VARIABLES // - -var MAP = [ - map0d, - map1d, - map2d, - map3d, - map4d, - map5d, - map6d, - map7d, - map8d, - map9d, - map10d -]; -var ACCESSOR_MAP = [ - accessormap0d, - accessormap1d, - accessormap2d, - accessormap3d, - accessormap4d, - accessormap5d, - accessormap6d, - accessormap7d, - accessormap8d, - accessormap9d, - accessormap10d -]; -var BLOCKED_MAP = [ - blockedmap2d, // 0 - blockedmap3d, - blockedmap4d, - blockedmap5d, - blockedmap6d, - blockedmap7d, - blockedmap8d, - blockedmap9d, - blockedmap10d // 8 -]; -var BLOCKED_ACCESSOR_MAP = [ - blockedaccessormap2d, // 0 - blockedaccessormap3d, - blockedaccessormap4d, - blockedaccessormap5d, - blockedaccessormap6d, - blockedaccessormap7d, - blockedaccessormap8d, - blockedaccessormap9d, - blockedaccessormap10d // 8 -]; -var MAX_DIMS = MAP.length -1; - - -// MAIN // - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* ## Notes -* -* - Each provided ndarray should be an `object` with the following properties: -* -* - **dtype**: data type. -* - **data**: data buffer. -* - **shape**: dimensions. -* - **strides**: stride lengths. -* - **offset**: index offset. -* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style). -* -* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array -* @param {Callback} fcn - callback function -* @param {*} [thisArg] - callback execution context -* @throws {Error} arrays must have the same number of dimensions -* @throws {Error} arrays must have the same shape -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map( arrays, fcn, thisArg ) { - var ndims; - var shx; - var shy; - var iox; - var ioy; - var len; - var ord; - var x; - var y; - var i; - var d; - - // Unpack the ndarrays and standardize ndarray meta data: - x = ndarray2object( arrays[ 0 ] ); - y = ndarray2object( arrays[ 1 ] ); - - // Verify that the input and output arrays have the same number of dimensions... - shx = x.shape; - shy = y.shape; - ndims = shx.length; - if ( ndims !== shy.length ) { - throw new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' ); - } - // Determine whether we can avoid iteration altogether... - if ( ndims === 0 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Verify that the input and output arrays have the same dimensions... - len = 1; // number of elements - for ( i = 0; i < ndims; i++ ) { - d = shx[ i ]; - if ( d !== shy[ i ] ) { - throw new Error( 'invalid arguments. Array must have the same shape.' ); - } - // Note that, if one of the dimensions is `0`, the length will be `0`... - len *= d; - } - // Check whether we were provided empty ndarrays... - if ( len === 0 ) { - return; - } - // Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays... - if ( ndims === 1 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Determine iteration order: - iox = iterationOrder( x.strides ); // +/-1 - ioy = iterationOrder( y.strides ); // +/-1 - - // Determine whether we can avoid blocked iteration... - ord = strides2order( x.strides ); - if ( iox !== 0 && ioy !== 0 && ord === strides2order( y.strides ) ) { - // Determine whether we can use simple nested loops... - if ( ndims <= MAX_DIMS ) { - // So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration... - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, ord, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, ord, fcn, thisArg ); - } - // Fall-through to blocked iteration... - } - // Determine whether we can perform blocked iteration... - if ( ndims <= MAX_DIMS ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - return BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - // Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)... - if ( x.accessorProtocol || y.accessorProtocol ) { - return accessormapnd( x, y, fcn, thisArg ); - } - mapnd( x, y, fcn, thisArg ); -} - - -// EXPORTS // - -module.exports = map; diff --git a/lib/nd.js b/lib/nd.js deleted file mode 100644 index 379d56e..0000000 --- a/lib/nd.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/lib/nd_accessors.js b/lib/nd_accessors.js deleted file mode 100644 index 719fd1e..0000000 --- a/lib/nd_accessors.js +++ /dev/null @@ -1,181 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var get; - var set; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/package.json b/package.json index 5182ef8..c1b688b 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Apply a callback to elements in an input ndarray and assign results to elements in an output ndarray.", "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,70 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-reverse": "^0.2.2", - "@stdlib/array-base-take-indexed": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/ndarray-base-ind2sub": "^0.2.2", - "@stdlib/ndarray-base-iteration-order": "^0.2.2", - "@stdlib/ndarray-base-ndarraylike2object": "^0.2.2", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-strides2order": "^0.2.2", - "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", - "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-complex128": "^0.3.0", - "@stdlib/array-filled": "^0.2.1", - "@stdlib/array-filled-by": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/array-ones": "^0.2.1", - "@stdlib/array-typed-complex-ctors": "^0.2.2", - "@stdlib/array-zeros": "^0.2.2", - "@stdlib/assert-is-same-complex128array": "^0.2.2", - "@stdlib/assert-is-same-float64array": "^0.2.2", - "@stdlib/blas-ext-base-dfill": "^0.2.2", - "@stdlib/blas-ext-base-gfill": "^0.2.1", - "@stdlib/complex-float64-ctor": "^0.0.3", - "@stdlib/complex-float64-imag": "^0.1.1", - "@stdlib/complex-float64-real": "^0.1.1", - "@stdlib/math-base-assert-is-nan": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/math-base-special-cbrt": "^0.2.2", - "@stdlib/math-base-special-floor": "^0.2.3", - "@stdlib/math-base-special-pow": "^0.3.0", - "@stdlib/math-base-special-sqrt": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-strides2offset": "^0.2.2", - "@stdlib/ndarray-base-to-array": "^0.2.1", - "@stdlib/ndarray-ctor": "^0.2.2", - "@stdlib/ndarray-from-scalar": "^0.2.1", - "@stdlib/number-float64-base-identity": "github:stdlib-js/number-float64-base-identity#main", - "@stdlib/random-base-discrete-uniform": "^0.2.1", - "@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", "base", @@ -113,9 +26,8 @@ "transform", "for-each" ], - "__stdlib__": {}, "funding": { "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..63b578c --- /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.0d.js b/test/test.0d.js deleted file mode 100644 index 1648cc8..0000000 --- a/test/test.0d.js +++ /dev/null @@ -1,89 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var scalar2ndarray = require( '@stdlib/ndarray-from-scalar' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( 1.0, { - 'dtype': 'float64' - }); - y = scalar2ndarray( 0.0, { - 'dtype': 'float64' - }); - - map( [ x, y ], scale ); - - expected = new Float64Array( [ 10.0 ] ); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( new Complex128( 1.0, 1.0 ), { - 'dtype': 'complex128' - }); - y = scalar2ndarray( new Complex128( 0.0, 0.0 ), { - 'dtype': 'complex128' - }); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ 10.0, 10.0 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.10d.js b/test/test.10d.js deleted file mode 100644 index 74b3998..0000000 --- a/test/test.10d.js +++ /dev/null @@ -1,2667 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -1, -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.1d.js b/test/test.1d.js deleted file mode 100644 index 21e0604..0000000 --- a/test/test.1d.js +++ /dev/null @@ -1,134 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (empty array)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'complex128', ones( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - y = ndarray( 'complex128', zeros( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.2d.js b/test/test.2d.js deleted file mode 100644 index 3e94e94..0000000 --- a/test/test.2d.js +++ /dev/null @@ -1,1195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( x.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.3d.js b/test/test.3d.js deleted file mode 100644 index 07f7516..0000000 --- a/test/test.3d.js +++ /dev/null @@ -1,1331 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ bsize*8, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 2 ]; - st = [ -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ -bsize*8, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ -1, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 2 ]; - st = [ -1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.4d.js b/test/test.4d.js deleted file mode 100644 index 8864e09..0000000 --- a/test/test.4d.js +++ /dev/null @@ -1,1503 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ -2, -2, -1, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ bsize*8, bsize*4, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ bsize*8, bsize*4, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ -bsize*4, bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2 ]; - st = [ -bsize*4, bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ 2, 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ 2, 2, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 1, 2 ]; - st = [ 2, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1 ]; - st = [ 1, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ 2, 4, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*4 ]; - st = [ 2, 4, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.5d.js b/test/test.5d.js deleted file mode 100644 index 16f3119..0000000 --- a/test/test.5d.js +++ /dev/null @@ -1,1740 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -8, -4, -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ -2, 4, -bsize*8, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, 4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ -2, 4, -4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1 ]; - st = [ -2, 4, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, -4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ 2, 4, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.6d.js b/test/test.6d.js deleted file mode 100644 index 41fef40..0000000 --- a/test/test.6d.js +++ /dev/null @@ -1,1892 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, -16, 8, -4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, -4, -4, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.7d.js b/test/test.7d.js deleted file mode 100644 index 8a3a7fe..0000000 --- a/test/test.7d.js +++ /dev/null @@ -1,2099 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, 8, -4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 1, 2 ]; - st = [ bsize*16, -8, 8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -8, -8, -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, -8, 4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ bsize*16, -8, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*16, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 2, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, bsize*8, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 2, 1 ]; - st = [ 2, -4, bsize*8, bsize*8, -bsize*16, bsize*16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 1, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, -2, 4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, -bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.8d.js b/test/test.8d.js deleted file mode 100644 index 2dc6333..0000000 --- a/test/test.8d.js +++ /dev/null @@ -1,2221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, -16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, 16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.9d.js b/test/test.9d.js deleted file mode 100644 index 2a38c2e..0000000 --- a/test/test.9d.js +++ /dev/null @@ -1,2447 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 5512e2c..0000000 --- a/test/test.js +++ /dev/null @@ -1,139 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same number of dimensions', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2 ] ], - [ [ 2, 2 ], [ 2, 2, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ], - [ [ 2, 2, 1, 2 ], [ 2, 1, 2 ] ], - [ [ 1, 1, 4, 2, 2, 2 ], [ 10, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same shape', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2, 2 ] ], - [ [ 3, 3 ], [ 2, 2 ] ], - [ [ 5, 5, 5 ], [ 5, 5, 4 ] ], - [ [ 1, 1, 1 ], [ 2, 2, 2 ] ], - [ [ 1, 4, 1, 2, 2 ], [ 3, 8 ] ], - [ [ 10, 2, 1 ], [ 1, 2, 10 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); diff --git a/test/test.nd.js b/test/test.nd.js deleted file mode 100644 index 9e4b18d..0000000 --- a/test/test.nd.js +++ /dev/null @@ -1,822 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset(sh, st); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); From b5b9c7aaf84c849805a43492d5e1fb5bb731fa51 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 12 May 2025 00:26:25 +0000 Subject: [PATCH 27/32] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index af54f1b..5182ef8 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,8 @@ "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3" + "@stdlib/types": "^0.4.3", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-complex128": "^0.3.0", @@ -117,4 +118,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 2a4a8fc47be73e02d525bafb2f2ac2efe692ffef Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 12 May 2025 00:26:53 +0000 Subject: [PATCH 28/32] Remove files --- index.d.ts | 117 -- index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 4964 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 9dd6ef1..0000000 --- a/index.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { ArrayLike } from '@stdlib/types/array'; -import { typedndarray } from '@stdlib/types/ndarray'; - -/** -* Callback invoked for each ndarray element. -* -* @returns output value -*/ -type Nullary = ( this: V ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @returns output value -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @returns output value -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Ternary = ( this: V, value: T, indices: Array, arr: typedndarray ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Callback = Nullary | Unary | Binary | Ternary; - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* @param arrays - array-like object containing one input ndarray and one output ndarray -* @param fcn - callback function -* @param thisArg - callback function execution context -* @throws arrays must have the same number of dimensions -* @throws arrays must have the same shape -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var ndarray = require( '@stdlib/ndarray-ctor' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarrays: -* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' ); -* var y = ndarray( 'float64', ybuf, shape, sy, oy, 'row-major' ); -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -declare function map( arrays: ArrayLike>, fcn: Callback, thisArg?: ThisParameterType> ): void; - - -// EXPORTS // - -export = map; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 1dad978..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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-strides2order@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import y from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var v="throw";var m="throw";var u=[function(r,s,f,o){s.data[s.offset]=f.call(o,r.data[r.offset],[],r.ref)},function(r,s,f,o){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=s.strides[0],c=r.offset,n=s.offset,e=r.data,t=s.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(xr0;)for(ur0;)for(mr0;)for(vr0;)for(yr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(mr0;)for(vr0;)for(yr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind from '@stdlib/ndarray-base-vind2bind';\nimport ind2sub from '@stdlib/ndarray-base-ind2sub';\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar ord;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tord = strides2order( x.strides );\n\tif ( iox !== 0 && ioy !== 0 && ord === strides2order( y.strides ) ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, ord, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, ord, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","isRowMajor","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","ord","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","strides2order","ordx","ordy","numel","order","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 63b578c..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 867fda641aed846c8c2497493069f098d39201cc Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 12 May 2025 00:27:23 +0000 Subject: [PATCH 29/32] Auto-generated commit --- .editorconfig | 180 - .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 - .github/workflows/test_published_package.yml | 105 - .gitignore | 194 - .npmignore | 229 - .npmrc | 31 - CHANGELOG.md | 77 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 51 +- SECURITY.md | 5 - .../benchmark.10d_blocked_columnmajor.js | 148 - benchmark/benchmark.10d_blocked_rowmajor.js | 148 - benchmark/benchmark.10d_columnmajor.js | 148 - benchmark/benchmark.10d_rowmajor.js | 148 - benchmark/benchmark.11d_columnmajor.js | 148 - benchmark/benchmark.11d_rowmajor.js | 148 - benchmark/benchmark.1d_columnmajor.js | 137 - benchmark/benchmark.1d_rowmajor.js | 137 - benchmark/benchmark.2d_blocked_columnmajor.js | 149 - benchmark/benchmark.2d_blocked_rowmajor.js | 149 - benchmark/benchmark.2d_columnmajor.js | 149 - benchmark/benchmark.2d_rowmajor.js | 150 - benchmark/benchmark.2d_rowmajor_accessors.js | 177 - ...benchmark.2d_rowmajor_accessors_complex.js | 184 - benchmark/benchmark.3d_blocked_columnmajor.js | 149 - benchmark/benchmark.3d_blocked_rowmajor.js | 149 - benchmark/benchmark.3d_columnmajor.js | 149 - benchmark/benchmark.3d_rowmajor.js | 149 - benchmark/benchmark.4d_blocked_columnmajor.js | 148 - benchmark/benchmark.4d_blocked_rowmajor.js | 148 - benchmark/benchmark.4d_columnmajor.js | 148 - benchmark/benchmark.4d_rowmajor.js | 148 - benchmark/benchmark.5d_blocked_columnmajor.js | 148 - benchmark/benchmark.5d_blocked_rowmajor.js | 148 - benchmark/benchmark.5d_columnmajor.js | 148 - benchmark/benchmark.5d_rowmajor.js | 148 - benchmark/benchmark.6d_blocked_columnmajor.js | 148 - benchmark/benchmark.6d_blocked_rowmajor.js | 148 - benchmark/benchmark.6d_columnmajor.js | 148 - benchmark/benchmark.6d_rowmajor.js | 148 - benchmark/benchmark.7d_blocked_columnmajor.js | 148 - benchmark/benchmark.7d_blocked_rowmajor.js | 148 - benchmark/benchmark.7d_columnmajor.js | 148 - benchmark/benchmark.7d_rowmajor.js | 148 - benchmark/benchmark.8d_blocked_columnmajor.js | 148 - benchmark/benchmark.8d_blocked_rowmajor.js | 148 - benchmark/benchmark.8d_columnmajor.js | 148 - benchmark/benchmark.8d_rowmajor.js | 148 - benchmark/benchmark.9d_blocked_columnmajor.js | 148 - benchmark/benchmark.9d_blocked_rowmajor.js | 148 - benchmark/benchmark.9d_columnmajor.js | 148 - benchmark/benchmark.9d_rowmajor.js | 148 - branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 19 - dist/index.js.map | 7 - docs/repl.txt | 78 - docs/types/test.ts | 128 - examples/index.js | 50 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/0d.js | 100 - lib/0d_accessors.js | 121 - lib/10d.js | 281 - lib/10d_accessors.js | 308 -- lib/10d_blocked.js | 389 -- lib/10d_blocked_accessors.js | 416 -- lib/1d.js | 129 - lib/1d_accessors.js | 156 - lib/2d.js | 167 - lib/2d_accessors.js | 194 - lib/2d_blocked.js | 195 - lib/2d_blocked_accessors.js | 222 - lib/3d.js | 181 - lib/3d_accessors.js | 208 - lib/3d_blocked.js | 221 - lib/3d_blocked_accessors.js | 248 - lib/4d.js | 195 - lib/4d_accessors.js | 222 - lib/4d_blocked.js | 245 - lib/4d_blocked_accessors.js | 272 - lib/5d.js | 209 - lib/5d_accessors.js | 236 - lib/5d_blocked.js | 269 - lib/5d_blocked_accessors.js | 296 - lib/6d.js | 225 - lib/6d_accessors.js | 252 - lib/6d_blocked.js | 293 - lib/6d_blocked_accessors.js | 320 -- lib/7d.js | 239 - lib/7d_accessors.js | 266 - lib/7d_blocked.js | 317 -- lib/7d_blocked_accessors.js | 344 -- lib/8d.js | 253 - lib/8d_accessors.js | 280 - lib/8d_blocked.js | 341 -- lib/8d_blocked_accessors.js | 368 -- lib/9d.js | 267 - lib/9d_accessors.js | 294 - lib/9d_blocked.js | 365 -- lib/9d_blocked_accessors.js | 392 -- lib/index.js | 81 - lib/main.js | 278 - lib/nd.js | 154 - lib/nd_accessors.js | 181 - package.json | 94 +- stats.html | 4842 +++++++++++++++++ test/dist/test.js | 33 - test/test.0d.js | 89 - test/test.10d.js | 2667 --------- test/test.1d.js | 134 - test/test.2d.js | 1195 ---- test/test.3d.js | 1331 ----- test/test.4d.js | 1503 ----- test/test.5d.js | 1740 ------ test/test.6d.js | 1892 ------- test/test.7d.js | 2099 ------- test/test.8d.js | 2221 -------- test/test.9d.js | 2447 --------- test/test.js | 139 - test/test.nd.js | 822 --- 138 files changed, 4872 insertions(+), 39398 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 .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.10d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.10d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.10d_columnmajor.js delete mode 100644 benchmark/benchmark.10d_rowmajor.js delete mode 100644 benchmark/benchmark.11d_columnmajor.js delete mode 100644 benchmark/benchmark.11d_rowmajor.js delete mode 100644 benchmark/benchmark.1d_columnmajor.js delete mode 100644 benchmark/benchmark.1d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.2d_columnmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors_complex.js delete mode 100644 benchmark/benchmark.3d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.3d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.3d_columnmajor.js delete mode 100644 benchmark/benchmark.3d_rowmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.4d_columnmajor.js delete mode 100644 benchmark/benchmark.4d_rowmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.5d_columnmajor.js delete mode 100644 benchmark/benchmark.5d_rowmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.6d_columnmajor.js delete mode 100644 benchmark/benchmark.6d_rowmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.7d_columnmajor.js delete mode 100644 benchmark/benchmark.7d_rowmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.8d_columnmajor.js delete mode 100644 benchmark/benchmark.8d_rowmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.9d_columnmajor.js delete mode 100644 benchmark/benchmark.9d_rowmajor.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 (97%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/0d.js delete mode 100644 lib/0d_accessors.js delete mode 100644 lib/10d.js delete mode 100644 lib/10d_accessors.js delete mode 100644 lib/10d_blocked.js delete mode 100644 lib/10d_blocked_accessors.js delete mode 100644 lib/1d.js delete mode 100644 lib/1d_accessors.js delete mode 100644 lib/2d.js delete mode 100644 lib/2d_accessors.js delete mode 100644 lib/2d_blocked.js delete mode 100644 lib/2d_blocked_accessors.js delete mode 100644 lib/3d.js delete mode 100644 lib/3d_accessors.js delete mode 100644 lib/3d_blocked.js delete mode 100644 lib/3d_blocked_accessors.js delete mode 100644 lib/4d.js delete mode 100644 lib/4d_accessors.js delete mode 100644 lib/4d_blocked.js delete mode 100644 lib/4d_blocked_accessors.js delete mode 100644 lib/5d.js delete mode 100644 lib/5d_accessors.js delete mode 100644 lib/5d_blocked.js delete mode 100644 lib/5d_blocked_accessors.js delete mode 100644 lib/6d.js delete mode 100644 lib/6d_accessors.js delete mode 100644 lib/6d_blocked.js delete mode 100644 lib/6d_blocked_accessors.js delete mode 100644 lib/7d.js delete mode 100644 lib/7d_accessors.js delete mode 100644 lib/7d_blocked.js delete mode 100644 lib/7d_blocked_accessors.js delete mode 100644 lib/8d.js delete mode 100644 lib/8d_accessors.js delete mode 100644 lib/8d_blocked.js delete mode 100644 lib/8d_blocked_accessors.js delete mode 100644 lib/9d.js delete mode 100644 lib/9d_accessors.js delete mode 100644 lib/9d_blocked.js delete mode 100644 lib/9d_blocked_accessors.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js delete mode 100644 lib/nd.js delete mode 100644 lib/nd_accessors.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.0d.js delete mode 100644 test/test.10d.js delete mode 100644 test/test.1d.js delete mode 100644 test/test.2d.js delete mode 100644 test/test.3d.js delete mode 100644 test/test.4d.js delete mode 100644 test/test.5d.js delete mode 100644 test/test.6d.js delete mode 100644 test/test.7d.js delete mode 100644 test/test.8d.js delete mode 100644 test/test.9d.js delete mode 100644 test/test.js delete mode 100644 test/test.nd.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/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index a1f1421..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/ndarray/base/map) 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 0696b91..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/ndarray/base/map) 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 1c89592..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: '29 17 * * 1' - - # 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 + + ```
@@ -214,7 +205,7 @@ console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); ## 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.10d_blocked_columnmajor.js b/benchmark/benchmark.10d_blocked_columnmajor.js deleted file mode 100644 index d0903eb..0000000 --- a/benchmark/benchmark.10d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_blocked_rowmajor.js b/benchmark/benchmark.10d_blocked_rowmajor.js deleted file mode 100644 index 623a672..0000000 --- a/benchmark/benchmark.10d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_columnmajor.js b/benchmark/benchmark.10d_columnmajor.js deleted file mode 100644 index 3d63c6a..0000000 --- a/benchmark/benchmark.10d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_rowmajor.js b/benchmark/benchmark.10d_rowmajor.js deleted file mode 100644 index 52addf9..0000000 --- a/benchmark/benchmark.10d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_columnmajor.js b/benchmark/benchmark.11d_columnmajor.js deleted file mode 100644 index eeb5347..0000000 --- a/benchmark/benchmark.11d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_rowmajor.js b/benchmark/benchmark.11d_rowmajor.js deleted file mode 100644 index 6d26910..0000000 --- a/benchmark/benchmark.11d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_columnmajor.js b/benchmark/benchmark.1d_columnmajor.js deleted file mode 100644 index 8f6bab0..0000000 --- a/benchmark/benchmark.1d_columnmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_rowmajor.js b/benchmark/benchmark.1d_rowmajor.js deleted file mode 100644 index e626ef1..0000000 --- a/benchmark/benchmark.1d_rowmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_columnmajor.js b/benchmark/benchmark.2d_blocked_columnmajor.js deleted file mode 100644 index c1023b7..0000000 --- a/benchmark/benchmark.2d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_rowmajor.js b/benchmark/benchmark.2d_blocked_rowmajor.js deleted file mode 100644 index 486875c..0000000 --- a/benchmark/benchmark.2d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_columnmajor.js b/benchmark/benchmark.2d_columnmajor.js deleted file mode 100644 index 2337425..0000000 --- a/benchmark/benchmark.2d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor.js b/benchmark/benchmark.2d_rowmajor.js deleted file mode 100644 index 1a3c39c..0000000 --- a/benchmark/benchmark.2d_rowmajor.js +++ /dev/null @@ -1,150 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors.js b/benchmark/benchmark.2d_rowmajor_accessors.js deleted file mode 100644 index f70f8dc..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors.js +++ /dev/null @@ -1,177 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf[ idx ]; -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf[ idx ] = value; -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors_complex.js b/benchmark/benchmark.2d_rowmajor_accessors_complex.js deleted file mode 100644 index aea8f4b..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors_complex.js +++ /dev/null @@ -1,184 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var ctors = require( '@stdlib/array-typed-complex-ctors' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'complex64' ]; -var order = 'row-major'; -var abtype = { - 'complex64': 'float32', - 'complex128': 'float64' -}; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf.get( idx ); -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf.set( value, idx ); -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var xbuf; - var ybuf; - var x; - var y; - - xbuf = filledarrayBy( len*2, abtype[ xtype ], discreteUniform( -100, 100 ) ); // eslint-disable-line max-len - ybuf = filledarray( 0.0, len*2, abtype[ ytype ] ); - x = { - 'dtype': xtype, - 'data': new ( ctors( xtype ) )( xbuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': new ( ctors( ytype ) )( ybuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 5; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_columnmajor.js b/benchmark/benchmark.3d_blocked_columnmajor.js deleted file mode 100644 index 2193d3d..0000000 --- a/benchmark/benchmark.3d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_rowmajor.js b/benchmark/benchmark.3d_blocked_rowmajor.js deleted file mode 100644 index ae68ae6..0000000 --- a/benchmark/benchmark.3d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_columnmajor.js b/benchmark/benchmark.3d_columnmajor.js deleted file mode 100644 index 719ade5..0000000 --- a/benchmark/benchmark.3d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_rowmajor.js b/benchmark/benchmark.3d_rowmajor.js deleted file mode 100644 index 0bbbb40..0000000 --- a/benchmark/benchmark.3d_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_columnmajor.js b/benchmark/benchmark.4d_blocked_columnmajor.js deleted file mode 100644 index ed280cc..0000000 --- a/benchmark/benchmark.4d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_rowmajor.js b/benchmark/benchmark.4d_blocked_rowmajor.js deleted file mode 100644 index ea544a6..0000000 --- a/benchmark/benchmark.4d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_columnmajor.js b/benchmark/benchmark.4d_columnmajor.js deleted file mode 100644 index bc7d32e..0000000 --- a/benchmark/benchmark.4d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_rowmajor.js b/benchmark/benchmark.4d_rowmajor.js deleted file mode 100644 index bd1fb1c..0000000 --- a/benchmark/benchmark.4d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_columnmajor.js b/benchmark/benchmark.5d_blocked_columnmajor.js deleted file mode 100644 index 13f1278..0000000 --- a/benchmark/benchmark.5d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_rowmajor.js b/benchmark/benchmark.5d_blocked_rowmajor.js deleted file mode 100644 index 8e68348..0000000 --- a/benchmark/benchmark.5d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_columnmajor.js b/benchmark/benchmark.5d_columnmajor.js deleted file mode 100644 index d432997..0000000 --- a/benchmark/benchmark.5d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_rowmajor.js b/benchmark/benchmark.5d_rowmajor.js deleted file mode 100644 index 101f685..0000000 --- a/benchmark/benchmark.5d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_columnmajor.js b/benchmark/benchmark.6d_blocked_columnmajor.js deleted file mode 100644 index 6394204..0000000 --- a/benchmark/benchmark.6d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_rowmajor.js b/benchmark/benchmark.6d_blocked_rowmajor.js deleted file mode 100644 index a7c75b2..0000000 --- a/benchmark/benchmark.6d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_columnmajor.js b/benchmark/benchmark.6d_columnmajor.js deleted file mode 100644 index 0788a72..0000000 --- a/benchmark/benchmark.6d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_rowmajor.js b/benchmark/benchmark.6d_rowmajor.js deleted file mode 100644 index 3fa5a61..0000000 --- a/benchmark/benchmark.6d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_columnmajor.js b/benchmark/benchmark.7d_blocked_columnmajor.js deleted file mode 100644 index 9833b60..0000000 --- a/benchmark/benchmark.7d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_rowmajor.js b/benchmark/benchmark.7d_blocked_rowmajor.js deleted file mode 100644 index 6811333..0000000 --- a/benchmark/benchmark.7d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_columnmajor.js b/benchmark/benchmark.7d_columnmajor.js deleted file mode 100644 index be78749..0000000 --- a/benchmark/benchmark.7d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_rowmajor.js b/benchmark/benchmark.7d_rowmajor.js deleted file mode 100644 index 79843a7..0000000 --- a/benchmark/benchmark.7d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_columnmajor.js b/benchmark/benchmark.8d_blocked_columnmajor.js deleted file mode 100644 index eeb2f7c..0000000 --- a/benchmark/benchmark.8d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_rowmajor.js b/benchmark/benchmark.8d_blocked_rowmajor.js deleted file mode 100644 index 1899e0b..0000000 --- a/benchmark/benchmark.8d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_columnmajor.js b/benchmark/benchmark.8d_columnmajor.js deleted file mode 100644 index e6902ea..0000000 --- a/benchmark/benchmark.8d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_rowmajor.js b/benchmark/benchmark.8d_rowmajor.js deleted file mode 100644 index 519c62f..0000000 --- a/benchmark/benchmark.8d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_columnmajor.js b/benchmark/benchmark.9d_blocked_columnmajor.js deleted file mode 100644 index 1579f28..0000000 --- a/benchmark/benchmark.9d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_rowmajor.js b/benchmark/benchmark.9d_blocked_rowmajor.js deleted file mode 100644 index 1b8469f..0000000 --- a/benchmark/benchmark.9d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_columnmajor.js b/benchmark/benchmark.9d_columnmajor.js deleted file mode 100644 index 5039b2f..0000000 --- a/benchmark/benchmark.9d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_rowmajor.js b/benchmark/benchmark.9d_rowmajor.js deleted file mode 100644 index 181f6df..0000000 --- a/benchmark/benchmark.9d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/branches.md b/branches.md deleted file mode 100644 index 458a893..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/ndarray/base/map" -%% click B href "https://github.com/stdlib-js/ndarray-base-map/tree/main" -%% click C href "https://github.com/stdlib-js/ndarray-base-map/tree/production" -%% click D href "https://github.com/stdlib-js/ndarray-base-map/tree/esm" -%% click E href "https://github.com/stdlib-js/ndarray-base-map/tree/deno" -%% click F href "https://github.com/stdlib-js/ndarray-base-map/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/map -[production-url]: https://github.com/stdlib-js/ndarray-base-map/tree/production -[deno-url]: https://github.com/stdlib-js/ndarray-base-map/tree/deno -[deno-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/ndarray-base-map/tree/umd -[umd-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/ndarray-base-map/tree/esm -[esm-readme]: https://github.com/stdlib-js/ndarray-base-map/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 4504e2e..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import map from '../docs/types/index'; -export = map; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index e2fc6d8..0000000 --- a/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict";var lr=function(a,v){return function(){return v||a((v={exports:{}}).exports,v),v.exports}};var Rr=lr(function(g0,Lr){"use strict";var jv=require("@stdlib/ndarray-base-unary-loop-interchange-order"),mv=require("@stdlib/ndarray-base-unary-tiling-block-size"),kv=require("@stdlib/array-base-take-indexed"),zv=require("@stdlib/array-base-reverse");function gv(a,v,Y,U){var r,A,F,R,L,B,P,T,D,C,K,_,w,E,h,O,q,k,u,z,i,S,d,f,e,l;for(l=jv(a.shape,a.strides,v.strides),w=l.sh,O=l.sx,q=l.sy,C=zv(l.idx),r=mv(a.dtype,v.dtype),k=a.offset,u=v.offset,A=a.data,F=v.data,R=O[0],B=q[0],e=w[1];e>0;)for(e0;)for(f0;)for(b0;)for(c0;)for(o0;)for(m0;)for(M0;)for(n0;)for(t0;)for(N0;)for(G0;)for(H0;)for(Q0;)for(J0;)for(dr0;)for(ar0;)for($0;)for(Z0;)for(V0;)for(sr0;)for(fr0;)for(tr0;)for(ir0;)for(or0;)for(er0;)for(vr0;)for(rr0;)for(qr0;)for(xr0;)for(cr0;)for(ur0;)for(pr0;)for(Sr0;)for(yr0;)for(fr0;)for(zr0;)for(hr0;)for(br0;)for(mr0;)for(jr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(wr0;)for(Mr0;)for(Er0;)for(Pr0;)for(Tr0;)for(Or0;)for(gr0;)for(zr0;)for(hr0;)for(br0;)for(d0;)for(S0;)for(o0;)for(x0;)for(j0;)for(n0;)for(t0;)for(p0;)for(g0;)for(H0;)for(Q0;)for(J0;)for(I0;)for(X0;)for($0;)for(Z0;)for(V0;)for(sr0;)for(W0;)for(N0;)for(ir0;)for(or0;)for(er0;)for(vr0;)for(rr0;)for(dr0;)for(ar0;)for(cr0;)for(ur0;)for(pr0;)for(Sr0;)for(yr0;)for(fr0;)for(tr0;)for(ir0;)for(br0;)for(mr0;)for(jr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(cr0;)for(ur0;)for(Er0;)for(Pr0;)for(Tr0;)for(Or0;)for(gr0;)for(zr0;)for(hr0;)for(br0;)for(mr0;)for(jr} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder = require( '@stdlib/ndarray-base-iteration-order' );\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' );\nvar blockedaccessormap2d = require( './2d_blocked_accessors.js' );\nvar blockedaccessormap3d = require( './3d_blocked_accessors.js' );\nvar blockedaccessormap4d = require( './4d_blocked_accessors.js' );\nvar blockedaccessormap5d = require( './5d_blocked_accessors.js' );\nvar blockedaccessormap6d = require( './6d_blocked_accessors.js' );\nvar blockedaccessormap7d = require( './7d_blocked_accessors.js' );\nvar blockedaccessormap8d = require( './8d_blocked_accessors.js' );\nvar blockedaccessormap9d = require( './9d_blocked_accessors.js' );\nvar blockedaccessormap10d = require( './10d_blocked_accessors.js' );\nvar blockedmap2d = require( './2d_blocked.js' );\nvar blockedmap3d = require( './3d_blocked.js' );\nvar blockedmap4d = require( './4d_blocked.js' );\nvar blockedmap5d = require( './5d_blocked.js' );\nvar blockedmap6d = require( './6d_blocked.js' );\nvar blockedmap7d = require( './7d_blocked.js' );\nvar blockedmap8d = require( './8d_blocked.js' );\nvar blockedmap9d = require( './9d_blocked.js' );\nvar blockedmap10d = require( './10d_blocked.js' );\nvar accessormap0d = require( './0d_accessors.js' );\nvar accessormap1d = require( './1d_accessors.js' );\nvar accessormap2d = require( './2d_accessors.js' );\nvar accessormap3d = require( './3d_accessors.js' );\nvar accessormap4d = require( './4d_accessors.js' );\nvar accessormap5d = require( './5d_accessors.js' );\nvar accessormap6d = require( './6d_accessors.js' );\nvar accessormap7d = require( './7d_accessors.js' );\nvar accessormap8d = require( './8d_accessors.js' );\nvar accessormap9d = require( './9d_accessors.js' );\nvar accessormap10d = require( './10d_accessors.js' );\nvar accessormapnd = require( './nd_accessors.js' );\nvar map0d = require( './0d.js' );\nvar map1d = require( './1d.js' );\nvar map2d = require( './2d.js' );\nvar map3d = require( './3d.js' );\nvar map4d = require( './4d.js' );\nvar map5d = require( './5d.js' );\nvar map6d = require( './6d.js' );\nvar map7d = require( './7d.js' );\nvar map8d = require( './8d.js' );\nvar map9d = require( './9d.js' );\nvar map10d = require( './10d.js' );\nvar mapnd = require( './nd.js' );\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar ord;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tord = strides2order( x.strides );\n\tif ( iox !== 0 && ioy !== 0 && ord === strides2order( y.strides ) ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, ord === 1, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, ord === 1, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray.\n*\n* @module @stdlib/ndarray-base-map\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var map = require( '@stdlib/ndarray-base-map' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\n\n// MODULES //\n\nvar main = require( './main.js' );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "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", - "names": ["require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "get", "set", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "get", "set", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "set", "get", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_accessors", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d_accessors", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "get", "set", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd_accessors", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "get", "set", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_d", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_main", "__commonJSMin", "exports", "module", "iterationOrder", "strides2order", "ndarray2object", "blockedaccessormap2d", "blockedaccessormap3d", "blockedaccessormap4d", "blockedaccessormap5d", "blockedaccessormap6d", "blockedaccessormap7d", "blockedaccessormap8d", "blockedaccessormap9d", "blockedaccessormap10d", "blockedmap2d", "blockedmap3d", "blockedmap4d", "blockedmap5d", "blockedmap6d", "blockedmap7d", "blockedmap8d", "blockedmap9d", "blockedmap10d", "accessormap0d", "accessormap1d", "accessormap2d", "accessormap3d", "accessormap4d", "accessormap5d", "accessormap6d", "accessormap7d", "accessormap8d", "accessormap9d", "accessormap10d", "accessormapnd", "map0d", "map1d", "map2d", "map3d", "map4d", "map5d", "map6d", "map7d", "map8d", "map9d", "map10d", "mapnd", "MAP", "ACCESSOR_MAP", "BLOCKED_MAP", "BLOCKED_ACCESSOR_MAP", "MAX_DIMS", "map", "arrays", "fcn", "thisArg", "ndims", "shx", "shy", "iox", "ioy", "len", "ord", "x", "y", "i", "d", "main"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index be30da1..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,78 +0,0 @@ - -{{alias}}( arrays, fcn[, thisArg] ) - Applies a callback function to elements in an input ndarray and assigns - results to elements in an output ndarray. - - Each provided "ndarray" should be an object with following properties: - - - dtype: data type. - - data: data buffer. - - shape: dimensions. - - strides: stride lengths. - - offset: index offset. - - order: specifies whether an ndarray is row-major (C-style) or column-major - (Fortran-style). - - The callback function is provided the following arguments: - - - value: current array element. - - indices: current array element indices. - - arr: the input ndarray. - - Parameters - ---------- - arrays: ArrayLikeObject - Array-like object containing one input ndarray and one output ndarray. - - fcn: Function - Callback function. - - thisArg: any (optional) - Callback function execution context. - - Examples - -------- - // Define ndarray data and meta data... - > var xbuf = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ybuf = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] ); - > var dtype = 'float64'; - > var shape = [ 2, 2 ]; - > var sx = [ 2, 1 ]; - > var sy = [ 2, 1 ]; - > var ox = 0; - > var oy = 0; - > var order = 'row-major'; - - // Define a callback function: - > function f( v ) { return v*10.0; }; - - // Using ndarrays... - > var x = {{alias:@stdlib/ndarray/ctor}}( dtype, xbuf, shape, sx, ox, order ); - > var y = {{alias:@stdlib/ndarray/ctor}}( dtype, ybuf, shape, sy, oy, order ); - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - // Using minimal ndarray-like objects... - > x = { - ... 'dtype': dtype, - ... 'data': xbuf, - ... 'shape': shape, - ... 'strides': sx, - ... 'offset': ox, - ... 'order': order - ... }; - > y = { - ... 'dtype': dtype, - ... 'data': ybuf, - ... 'shape': shape, - ... 'strides': sy, - ... 'offset': oy, - ... 'order': order - ... }; - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - See Also - -------- diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 320d548..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/// - -import { ndarray } from '@stdlib/types/ndarray'; -import map = require( './index' ); - -/** -* Mock function to create an ndarray-like object. -* -* @returns ndarray-like object -*/ -function array(): ndarray { - const obj: ndarray = { - 'byteLength': 80, - 'BYTES_PER_ELEMENT': 8, - 'data': new Float64Array( 10 ), - 'dtype': 'float64', - 'flags': { - 'ROW_MAJOR_CONTIGUOUS': true, - 'COLUMN_MAJOR_CONTIGUOUS': false - }, - 'length': 10, - 'ndims': 1, - 'offset': 0, - 'order': 'row-major', - 'shape': [ 10 ], - 'strides': [ 1 ], - 'get': (): number => 0, - 'set': (): ndarray => obj - }; - return obj; -} - -/** -* Evaluates the identity function. -* -* @param x - input value -* @returns input value -*/ -function identity( x: number ): number { - return x; -} - -// TESTS // - -// The function returns `undefined`... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, identity ); // $ExpectType void - map( arrays, identity, {} ); // $ExpectType void -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object containing ndarray-like objects... -{ - map( 5, identity ); // $ExpectError - map( true, identity ); // $ExpectError - map( false, identity ); // $ExpectError - map( null, identity ); // $ExpectError - map( undefined, identity ); // $ExpectError - map( {}, identity ); // $ExpectError - map( [ 1 ], identity ); // $ExpectError - map( ( x: number ): number => x, identity ); // $ExpectError - - map( 5, identity, {} ); // $ExpectError - map( true, identity, {} ); // $ExpectError - map( false, identity, {} ); // $ExpectError - map( null, identity, {} ); // $ExpectError - map( undefined, identity, {} ); // $ExpectError - map( {}, identity, {} ); // $ExpectError - map( [ 1 ], identity, {} ); // $ExpectError - map( ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a callback function... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, '10' ); // $ExpectError - map( arrays, 5 ); // $ExpectError - map( arrays, true ); // $ExpectError - map( arrays, false ); // $ExpectError - map( arrays, null ); // $ExpectError - map( arrays, undefined ); // $ExpectError - map( arrays, [] ); // $ExpectError - map( arrays, {} ); // $ExpectError - - map( arrays, '10', {} ); // $ExpectError - map( arrays, 5, {} ); // $ExpectError - map( arrays, true, {} ); // $ExpectError - map( arrays, false, {} ); // $ExpectError - map( arrays, null, {} ); // $ExpectError - map( arrays, undefined, {} ); // $ExpectError - map( arrays, [], {} ); // $ExpectError - map( arrays, {}, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map(); // $ExpectError - map( arrays ); // $ExpectError{ - map( arrays, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index d89ee00..0000000 --- a/examples/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var ndarray2array = require( '@stdlib/ndarray-base-to-array' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var map = require( './../lib' ); - -var N = 10; -var x = { - 'dtype': 'generic', - 'data': filledarrayBy( N, 'generic', discreteUniform( -100, 100 ) ), - 'shape': [ 5, 2 ], - 'strides': [ 2, 1 ], - 'offset': 0, - 'order': 'row-major' -}; -var y = { - 'dtype': 'generic', - 'data': filledarray( 0, N, 'generic' ), - 'shape': x.shape.slice(), - 'strides': shape2strides( x.shape, 'column-major' ), - 'offset': 0, - 'order': 'column-major' -}; - -map( [ x, y ], naryFunction( abs, 1 ) ); -console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); -console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 97% rename from docs/types/index.d.ts rename to index.d.ts index 78ac9b8..9dd6ef1 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -18,7 +18,7 @@ // TypeScript Version: 4.1 -/// +/// import { ArrayLike } from '@stdlib/types/array'; import { typedndarray } from '@stdlib/types/ndarray'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..94eda17 --- /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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-strides2order@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import y from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var v="throw";var m="throw";var u=[function(r,s,f,o){s.data[s.offset]=f.call(o,r.data[r.offset],[],r.ref)},function(r,s,f,o){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=s.strides[0],c=r.offset,n=s.offset,e=r.data,t=s.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(xr0;)for(ur0;)for(mr0;)for(vr0;)for(yr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(mr0;)for(vr0;)for(yr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind from '@stdlib/ndarray-base-vind2bind';\nimport ind2sub from '@stdlib/ndarray-base-ind2sub';\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar ord;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tord = strides2order( x.strides );\n\tif ( iox !== 0 && ioy !== 0 && ord === strides2order( y.strides ) ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, ord === 1, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, ord === 1, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","isRowMajor","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","ord","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","strides2order","ordx","ordy","numel","order","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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AMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CACDvC,IAAM0C,EACNzC,IAAM0C,CACN,CAUX,ECjQA,SAAwBxD,EAAGC,EAAGC,EAAKC,GAClC,IAAIiE,EACA5D,EACAC,EACAC,EACAS,EACAY,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAhD,EACAS,EACAY,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAS,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAjC,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAnF,EACAC,EACAV,EACAW,EACAU,EACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACArC,GACAC,GACAgD,GACAC,GACA7D,GACAC,GACAC,GACAW,GACAQ,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAa,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACA5B,GA2BJ,IArBAvD,GADAuD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BK,GACPE,GAAKqD,GAAErD,GACPC,GAAKoD,GAAEpD,GACPJ,EAAMQ,EAASgD,GAAExD,KAGjB+C,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,GAAKzE,EAAEK,OACPqE,GAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMc,GAAG,GACTb,EAAMc,GAAG,GAGHgF,GAAKnF,EAAG,GAAImF,GAAK,GAUtB,IATKA,GAAKrC,GACTP,GAAK4C,GACLA,GAAK,IAEL5C,GAAKO,EACLqC,IAAMrC,GAEPmC,EAAM9B,GAAOgC,GAAGjF,GAAG,GACnBgF,EAAM9B,GAAO+B,GAAGhF,GAAG,GACb6E,GAAKhF,EAAG,GAAIgF,GAAK,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sB,EACNrB,IAAMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CACDvC,IAAM0C,EACNzC,IAAM0C,CACN,CAUX,ECvQA,SAAwBxD,EAAGC,EAAGC,EAAKC,GAClC,IAAIiE,EACA5D,EACAC,EACAwD,EACAC,EACAxD,EACAS,EACAY,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAhD,EACAS,EACAY,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAS,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAjC,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAnF,EACAC,EACAV,EACAW,GACAU,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACArC,GACAC,GACAgD,GACAC,GACA7D,GACAC,GACAC,GACAW,GACAQ,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAa,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACA5B,GA+BJ,IAzBAvD,GADAuD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BK,GACPE,GAAKqD,GAAErD,GACPC,GAAKoD,GAAEpD,GACPJ,EAAMQ,EAASgD,GAAExD,KAGjB+C,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,GAAKzE,EAAEK,OACPqE,GAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMc,GAAG,GACTb,EAAMc,GAAG,GAGTwC,EAAMjE,EAAEgE,UAAU,GAClBE,EAAMjE,EAAE+D,UAAU,GAGZyC,GAAKnF,EAAG,GAAImF,GAAK,GAUtB,IATKA,GAAKrC,GACTP,GAAK4C,GACLA,GAAK,IAEL5C,GAAKO,EACLqC,IAAMrC,GAEPmC,EAAM9B,GAAOgC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"} \ No newline at end of file diff --git a/lib/0d.js b/lib/0d.js deleted file mode 100644 index f19e08f..0000000 --- a/lib/0d.js +++ /dev/null @@ -1,100 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ){ -* return z * 10.0; -* } -* -* // Create a data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0 ] ); -* var ybuf = new Float64Array( 1 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offset: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like object: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* } -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0 ] -*/ -function map0d( x, y, fcn, thisArg ) { - y.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref ); -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/0d_accessors.js b/lib/0d_accessors.js deleted file mode 100644 index 0ce37b7..0000000 --- a/lib/0d_accessors.js +++ /dev/null @@ -1,121 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var ybuf = new Complex64Array( 2 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 30.0 -* -* var im = imagf( v ); -* // returns 40.0 -*/ -function map0d( x, y, fcn, thisArg ) { - y.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/10d.js b/lib/10d.js deleted file mode 100644 index 40921fb..0000000 --- a/lib/10d.js +++ /dev/null @@ -1,281 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map10d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_accessors.js b/lib/10d_accessors.js deleted file mode 100644 index 9719f80..0000000 --- a/lib/10d_accessors.js +++ /dev/null @@ -1,308 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map10d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_blocked.js b/lib/10d_blocked.js deleted file mode 100644 index 61f8ad6..0000000 --- a/lib/10d_blocked.js +++ /dev/null @@ -1,389 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/10d_blocked_accessors.js b/lib/10d_blocked_accessors.js deleted file mode 100644 index b11b42d..0000000 --- a/lib/10d_blocked_accessors.js +++ /dev/null @@ -1,416 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/1d.js b/lib/1d.js deleted file mode 100644 index b5f0220..0000000 --- a/lib/1d.js +++ /dev/null @@ -1,129 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 2 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 40.0, 60.0, 80.0 ] -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/1d_accessors.js b/lib/1d_accessors.js deleted file mode 100644 index e977a57..0000000 --- a/lib/1d_accessors.js +++ /dev/null @@ -1,156 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 1 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/2d.js b/lib/2d.js deleted file mode 100644 index f648532..0000000 --- a/lib/2d.js +++ /dev/null @@ -1,167 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map2d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function map2d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_accessors.js b/lib/2d_accessors.js deleted file mode 100644 index 8468f7a..0000000 --- a/lib/2d_accessors.js +++ /dev/null @@ -1,194 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map2d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map2d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_blocked.js b/lib/2d_blocked.js deleted file mode 100644 index 58716e3..0000000 --- a/lib/2d_blocked.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/2d_blocked_accessors.js b/lib/2d_blocked_accessors.js deleted file mode 100644 index b0640fc..0000000 --- a/lib/2d_blocked_accessors.js +++ /dev/null @@ -1,222 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/3d.js b/lib/3d.js deleted file mode 100644 index 64d2b03..0000000 --- a/lib/3d.js +++ /dev/null @@ -1,181 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map3d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map3d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_accessors.js b/lib/3d_accessors.js deleted file mode 100644 index 5b2c781..0000000 --- a/lib/3d_accessors.js +++ /dev/null @@ -1,208 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 2, 1 ]; -* var sy = [ 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map3d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map3d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var get; - var set; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_blocked.js b/lib/3d_blocked.js deleted file mode 100644 index b88365a..0000000 --- a/lib/3d_blocked.js +++ /dev/null @@ -1,221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/3d_blocked_accessors.js b/lib/3d_blocked_accessors.js deleted file mode 100644 index f27a875..0000000 --- a/lib/3d_blocked_accessors.js +++ /dev/null @@ -1,248 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 2, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/4d.js b/lib/4d.js deleted file mode 100644 index e890063..0000000 --- a/lib/4d.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map4d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map4d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_accessors.js b/lib/4d_accessors.js deleted file mode 100644 index 6a9229d..0000000 --- a/lib/4d_accessors.js +++ /dev/null @@ -1,222 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map4d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map4d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_blocked.js b/lib/4d_blocked.js deleted file mode 100644 index 7a2e98b..0000000 --- a/lib/4d_blocked.js +++ /dev/null @@ -1,245 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/4d_blocked_accessors.js b/lib/4d_blocked_accessors.js deleted file mode 100644 index 3ffdf38..0000000 --- a/lib/4d_blocked_accessors.js +++ /dev/null @@ -1,272 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/5d.js b/lib/5d.js deleted file mode 100644 index 48262e6..0000000 --- a/lib/5d.js +++ /dev/null @@ -1,209 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map5d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map5d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_accessors.js b/lib/5d_accessors.js deleted file mode 100644 index f678ec9..0000000 --- a/lib/5d_accessors.js +++ /dev/null @@ -1,236 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map5d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map5d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_blocked.js b/lib/5d_blocked.js deleted file mode 100644 index feccd93..0000000 --- a/lib/5d_blocked.js +++ /dev/null @@ -1,269 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/5d_blocked_accessors.js b/lib/5d_blocked_accessors.js deleted file mode 100644 index e7c8d04..0000000 --- a/lib/5d_blocked_accessors.js +++ /dev/null @@ -1,296 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/6d.js b/lib/6d.js deleted file mode 100644 index 118b2f8..0000000 --- a/lib/6d.js +++ /dev/null @@ -1,225 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map6d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map6d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_accessors.js b/lib/6d_accessors.js deleted file mode 100644 index edf42be..0000000 --- a/lib/6d_accessors.js +++ /dev/null @@ -1,252 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map6d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map6d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_blocked.js b/lib/6d_blocked.js deleted file mode 100644 index 2bfdfbb..0000000 --- a/lib/6d_blocked.js +++ /dev/null @@ -1,293 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/6d_blocked_accessors.js b/lib/6d_blocked_accessors.js deleted file mode 100644 index 4487255..0000000 --- a/lib/6d_blocked_accessors.js +++ /dev/null @@ -1,320 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var set; - var get; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/7d.js b/lib/7d.js deleted file mode 100644 index 9b68de0..0000000 --- a/lib/7d.js +++ /dev/null @@ -1,239 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map7d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_accessors.js b/lib/7d_accessors.js deleted file mode 100644 index 709514b..0000000 --- a/lib/7d_accessors.js +++ /dev/null @@ -1,266 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map7d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_blocked.js b/lib/7d_blocked.js deleted file mode 100644 index 73764f4..0000000 --- a/lib/7d_blocked.js +++ /dev/null @@ -1,317 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/7d_blocked_accessors.js b/lib/7d_blocked_accessors.js deleted file mode 100644 index 6726392..0000000 --- a/lib/7d_blocked_accessors.js +++ /dev/null @@ -1,344 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/8d.js b/lib/8d.js deleted file mode 100644 index d5f2e9c..0000000 --- a/lib/8d.js +++ /dev/null @@ -1,253 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map8d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_accessors.js b/lib/8d_accessors.js deleted file mode 100644 index ff223bb..0000000 --- a/lib/8d_accessors.js +++ /dev/null @@ -1,280 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map8d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_blocked.js b/lib/8d_blocked.js deleted file mode 100644 index ed8b2a4..0000000 --- a/lib/8d_blocked.js +++ /dev/null @@ -1,341 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/8d_blocked_accessors.js b/lib/8d_blocked_accessors.js deleted file mode 100644 index 64da579..0000000 --- a/lib/8d_blocked_accessors.js +++ /dev/null @@ -1,368 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/9d.js b/lib/9d.js deleted file mode 100644 index 64118ca..0000000 --- a/lib/9d.js +++ /dev/null @@ -1,267 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map9d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_accessors.js b/lib/9d_accessors.js deleted file mode 100644 index 1d5db89..0000000 --- a/lib/9d_accessors.js +++ /dev/null @@ -1,294 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map9d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_blocked.js b/lib/9d_blocked.js deleted file mode 100644 index 14d237a..0000000 --- a/lib/9d_blocked.js +++ /dev/null @@ -1,365 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/9d_blocked_accessors.js b/lib/9d_blocked_accessors.js deleted file mode 100644 index cebb0ce..0000000 --- a/lib/9d_blocked_accessors.js +++ /dev/null @@ -1,392 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 80cf80e..0000000 --- a/lib/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray. -* -* @module @stdlib/ndarray-base-map -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var map = require( '@stdlib/ndarray-base-map' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index ae7bb6b..0000000 --- a/lib/main.js +++ /dev/null @@ -1,278 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var iterationOrder = require( '@stdlib/ndarray-base-iteration-order' ); -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' ); -var blockedaccessormap2d = require( './2d_blocked_accessors.js' ); -var blockedaccessormap3d = require( './3d_blocked_accessors.js' ); -var blockedaccessormap4d = require( './4d_blocked_accessors.js' ); -var blockedaccessormap5d = require( './5d_blocked_accessors.js' ); -var blockedaccessormap6d = require( './6d_blocked_accessors.js' ); -var blockedaccessormap7d = require( './7d_blocked_accessors.js' ); -var blockedaccessormap8d = require( './8d_blocked_accessors.js' ); -var blockedaccessormap9d = require( './9d_blocked_accessors.js' ); -var blockedaccessormap10d = require( './10d_blocked_accessors.js' ); -var blockedmap2d = require( './2d_blocked.js' ); -var blockedmap3d = require( './3d_blocked.js' ); -var blockedmap4d = require( './4d_blocked.js' ); -var blockedmap5d = require( './5d_blocked.js' ); -var blockedmap6d = require( './6d_blocked.js' ); -var blockedmap7d = require( './7d_blocked.js' ); -var blockedmap8d = require( './8d_blocked.js' ); -var blockedmap9d = require( './9d_blocked.js' ); -var blockedmap10d = require( './10d_blocked.js' ); -var accessormap0d = require( './0d_accessors.js' ); -var accessormap1d = require( './1d_accessors.js' ); -var accessormap2d = require( './2d_accessors.js' ); -var accessormap3d = require( './3d_accessors.js' ); -var accessormap4d = require( './4d_accessors.js' ); -var accessormap5d = require( './5d_accessors.js' ); -var accessormap6d = require( './6d_accessors.js' ); -var accessormap7d = require( './7d_accessors.js' ); -var accessormap8d = require( './8d_accessors.js' ); -var accessormap9d = require( './9d_accessors.js' ); -var accessormap10d = require( './10d_accessors.js' ); -var accessormapnd = require( './nd_accessors.js' ); -var map0d = require( './0d.js' ); -var map1d = require( './1d.js' ); -var map2d = require( './2d.js' ); -var map3d = require( './3d.js' ); -var map4d = require( './4d.js' ); -var map5d = require( './5d.js' ); -var map6d = require( './6d.js' ); -var map7d = require( './7d.js' ); -var map8d = require( './8d.js' ); -var map9d = require( './9d.js' ); -var map10d = require( './10d.js' ); -var mapnd = require( './nd.js' ); - - -// VARIABLES // - -var MAP = [ - map0d, - map1d, - map2d, - map3d, - map4d, - map5d, - map6d, - map7d, - map8d, - map9d, - map10d -]; -var ACCESSOR_MAP = [ - accessormap0d, - accessormap1d, - accessormap2d, - accessormap3d, - accessormap4d, - accessormap5d, - accessormap6d, - accessormap7d, - accessormap8d, - accessormap9d, - accessormap10d -]; -var BLOCKED_MAP = [ - blockedmap2d, // 0 - blockedmap3d, - blockedmap4d, - blockedmap5d, - blockedmap6d, - blockedmap7d, - blockedmap8d, - blockedmap9d, - blockedmap10d // 8 -]; -var BLOCKED_ACCESSOR_MAP = [ - blockedaccessormap2d, // 0 - blockedaccessormap3d, - blockedaccessormap4d, - blockedaccessormap5d, - blockedaccessormap6d, - blockedaccessormap7d, - blockedaccessormap8d, - blockedaccessormap9d, - blockedaccessormap10d // 8 -]; -var MAX_DIMS = MAP.length -1; - - -// MAIN // - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* ## Notes -* -* - Each provided ndarray should be an `object` with the following properties: -* -* - **dtype**: data type. -* - **data**: data buffer. -* - **shape**: dimensions. -* - **strides**: stride lengths. -* - **offset**: index offset. -* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style). -* -* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array -* @param {Callback} fcn - callback function -* @param {*} [thisArg] - callback execution context -* @throws {Error} arrays must have the same number of dimensions -* @throws {Error} arrays must have the same shape -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map( arrays, fcn, thisArg ) { - var ndims; - var shx; - var shy; - var iox; - var ioy; - var len; - var ord; - var x; - var y; - var i; - var d; - - // Unpack the ndarrays and standardize ndarray meta data: - x = ndarray2object( arrays[ 0 ] ); - y = ndarray2object( arrays[ 1 ] ); - - // Verify that the input and output arrays have the same number of dimensions... - shx = x.shape; - shy = y.shape; - ndims = shx.length; - if ( ndims !== shy.length ) { - throw new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' ); - } - // Determine whether we can avoid iteration altogether... - if ( ndims === 0 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Verify that the input and output arrays have the same dimensions... - len = 1; // number of elements - for ( i = 0; i < ndims; i++ ) { - d = shx[ i ]; - if ( d !== shy[ i ] ) { - throw new Error( 'invalid arguments. Array must have the same shape.' ); - } - // Note that, if one of the dimensions is `0`, the length will be `0`... - len *= d; - } - // Check whether we were provided empty ndarrays... - if ( len === 0 ) { - return; - } - // Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays... - if ( ndims === 1 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Determine iteration order: - iox = iterationOrder( x.strides ); // +/-1 - ioy = iterationOrder( y.strides ); // +/-1 - - // Determine whether we can avoid blocked iteration... - ord = strides2order( x.strides ); - if ( iox !== 0 && ioy !== 0 && ord === strides2order( y.strides ) ) { - // Determine whether we can use simple nested loops... - if ( ndims <= MAX_DIMS ) { - // So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration... - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, ord === 1, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, ord === 1, fcn, thisArg ); - } - // Fall-through to blocked iteration... - } - // Determine whether we can perform blocked iteration... - if ( ndims <= MAX_DIMS ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - return BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - // Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)... - if ( x.accessorProtocol || y.accessorProtocol ) { - return accessormapnd( x, y, fcn, thisArg ); - } - mapnd( x, y, fcn, thisArg ); -} - - -// EXPORTS // - -module.exports = map; diff --git a/lib/nd.js b/lib/nd.js deleted file mode 100644 index 379d56e..0000000 --- a/lib/nd.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/lib/nd_accessors.js b/lib/nd_accessors.js deleted file mode 100644 index 719fd1e..0000000 --- a/lib/nd_accessors.js +++ /dev/null @@ -1,181 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var get; - var set; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/package.json b/package.json index 5182ef8..c1b688b 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Apply a callback to elements in an input ndarray and assign results to elements in an output ndarray.", "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,70 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-reverse": "^0.2.2", - "@stdlib/array-base-take-indexed": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/ndarray-base-ind2sub": "^0.2.2", - "@stdlib/ndarray-base-iteration-order": "^0.2.2", - "@stdlib/ndarray-base-ndarraylike2object": "^0.2.2", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-strides2order": "^0.2.2", - "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", - "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-complex128": "^0.3.0", - "@stdlib/array-filled": "^0.2.1", - "@stdlib/array-filled-by": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/array-ones": "^0.2.1", - "@stdlib/array-typed-complex-ctors": "^0.2.2", - "@stdlib/array-zeros": "^0.2.2", - "@stdlib/assert-is-same-complex128array": "^0.2.2", - "@stdlib/assert-is-same-float64array": "^0.2.2", - "@stdlib/blas-ext-base-dfill": "^0.2.2", - "@stdlib/blas-ext-base-gfill": "^0.2.1", - "@stdlib/complex-float64-ctor": "^0.0.3", - "@stdlib/complex-float64-imag": "^0.1.1", - "@stdlib/complex-float64-real": "^0.1.1", - "@stdlib/math-base-assert-is-nan": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/math-base-special-cbrt": "^0.2.2", - "@stdlib/math-base-special-floor": "^0.2.3", - "@stdlib/math-base-special-pow": "^0.3.0", - "@stdlib/math-base-special-sqrt": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-strides2offset": "^0.2.2", - "@stdlib/ndarray-base-to-array": "^0.2.1", - "@stdlib/ndarray-ctor": "^0.2.2", - "@stdlib/ndarray-from-scalar": "^0.2.1", - "@stdlib/number-float64-base-identity": "github:stdlib-js/number-float64-base-identity#main", - "@stdlib/random-base-discrete-uniform": "^0.2.1", - "@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", "base", @@ -113,9 +26,8 @@ "transform", "for-each" ], - "__stdlib__": {}, "funding": { "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..3775751 --- /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.0d.js b/test/test.0d.js deleted file mode 100644 index 1648cc8..0000000 --- a/test/test.0d.js +++ /dev/null @@ -1,89 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var scalar2ndarray = require( '@stdlib/ndarray-from-scalar' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( 1.0, { - 'dtype': 'float64' - }); - y = scalar2ndarray( 0.0, { - 'dtype': 'float64' - }); - - map( [ x, y ], scale ); - - expected = new Float64Array( [ 10.0 ] ); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( new Complex128( 1.0, 1.0 ), { - 'dtype': 'complex128' - }); - y = scalar2ndarray( new Complex128( 0.0, 0.0 ), { - 'dtype': 'complex128' - }); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ 10.0, 10.0 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.10d.js b/test/test.10d.js deleted file mode 100644 index 74b3998..0000000 --- a/test/test.10d.js +++ /dev/null @@ -1,2667 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -1, -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.1d.js b/test/test.1d.js deleted file mode 100644 index 21e0604..0000000 --- a/test/test.1d.js +++ /dev/null @@ -1,134 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (empty array)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'complex128', ones( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - y = ndarray( 'complex128', zeros( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.2d.js b/test/test.2d.js deleted file mode 100644 index 3e94e94..0000000 --- a/test/test.2d.js +++ /dev/null @@ -1,1195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( x.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.3d.js b/test/test.3d.js deleted file mode 100644 index 07f7516..0000000 --- a/test/test.3d.js +++ /dev/null @@ -1,1331 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ bsize*8, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 2 ]; - st = [ -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ -bsize*8, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ -1, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 2 ]; - st = [ -1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.4d.js b/test/test.4d.js deleted file mode 100644 index 8864e09..0000000 --- a/test/test.4d.js +++ /dev/null @@ -1,1503 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ -2, -2, -1, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ bsize*8, bsize*4, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ bsize*8, bsize*4, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ -bsize*4, bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2 ]; - st = [ -bsize*4, bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ 2, 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ 2, 2, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 1, 2 ]; - st = [ 2, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1 ]; - st = [ 1, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ 2, 4, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*4 ]; - st = [ 2, 4, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.5d.js b/test/test.5d.js deleted file mode 100644 index 16f3119..0000000 --- a/test/test.5d.js +++ /dev/null @@ -1,1740 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -8, -4, -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ -2, 4, -bsize*8, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, 4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ -2, 4, -4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1 ]; - st = [ -2, 4, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, -4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ 2, 4, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.6d.js b/test/test.6d.js deleted file mode 100644 index 41fef40..0000000 --- a/test/test.6d.js +++ /dev/null @@ -1,1892 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, -16, 8, -4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, -4, -4, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.7d.js b/test/test.7d.js deleted file mode 100644 index 8a3a7fe..0000000 --- a/test/test.7d.js +++ /dev/null @@ -1,2099 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, 8, -4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 1, 2 ]; - st = [ bsize*16, -8, 8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -8, -8, -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, -8, 4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ bsize*16, -8, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*16, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 2, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, bsize*8, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 2, 1 ]; - st = [ 2, -4, bsize*8, bsize*8, -bsize*16, bsize*16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 1, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, -2, 4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, -bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.8d.js b/test/test.8d.js deleted file mode 100644 index 2dc6333..0000000 --- a/test/test.8d.js +++ /dev/null @@ -1,2221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, -16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, 16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.9d.js b/test/test.9d.js deleted file mode 100644 index 2a38c2e..0000000 --- a/test/test.9d.js +++ /dev/null @@ -1,2447 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 5512e2c..0000000 --- a/test/test.js +++ /dev/null @@ -1,139 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same number of dimensions', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2 ] ], - [ [ 2, 2 ], [ 2, 2, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ], - [ [ 2, 2, 1, 2 ], [ 2, 1, 2 ] ], - [ [ 1, 1, 4, 2, 2, 2 ], [ 10, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same shape', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2, 2 ] ], - [ [ 3, 3 ], [ 2, 2 ] ], - [ [ 5, 5, 5 ], [ 5, 5, 4 ] ], - [ [ 1, 1, 1 ], [ 2, 2, 2 ] ], - [ [ 1, 4, 1, 2, 2 ], [ 3, 8 ] ], - [ [ 10, 2, 1 ], [ 1, 2, 10 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); diff --git a/test/test.nd.js b/test/test.nd.js deleted file mode 100644 index 9e4b18d..0000000 --- a/test/test.nd.js +++ /dev/null @@ -1,822 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset(sh, st); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); From 70888a70b60964eeceae0797bbdf93e63c983fab Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 26 May 2025 01:45:58 +0000 Subject: [PATCH 30/32] Transform error messages --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index af54f1b..5182ef8 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,8 @@ "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3" + "@stdlib/types": "^0.4.3", + "@stdlib/error-tools-fmtprodmsg": "^0.2.2" }, "devDependencies": { "@stdlib/array-complex128": "^0.3.0", @@ -117,4 +118,4 @@ "type": "opencollective", "url": "https://opencollective.com/stdlib" } -} +} \ No newline at end of file From 29acbe5a05b4cb764b369a7ae73e0f8d7f94ba3b Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 26 May 2025 02:23:09 +0000 Subject: [PATCH 31/32] Remove files --- index.d.ts | 117 -- index.mjs | 4 - index.mjs.map | 1 - stats.html | 4842 ------------------------------------------------- 4 files changed, 4964 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 9dd6ef1..0000000 --- a/index.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { ArrayLike } from '@stdlib/types/array'; -import { typedndarray } from '@stdlib/types/ndarray'; - -/** -* Callback invoked for each ndarray element. -* -* @returns output value -*/ -type Nullary = ( this: V ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @returns output value -*/ -type Unary = ( this: V, value: T ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @returns output value -*/ -type Binary = ( this: V, value: T, indices: Array ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Ternary = ( this: V, value: T, indices: Array, arr: typedndarray ) => U; - -/** -* Callback invoked for each ndarray element. -* -* @param value - current array element -* @param indices - current array element indices -* @param arr - input array -* @returns output value -*/ -type Callback = Nullary | Unary | Binary | Ternary; - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* @param arrays - array-like object containing one input ndarray and one output ndarray -* @param fcn - callback function -* @param thisArg - callback function execution context -* @throws arrays must have the same number of dimensions -* @throws arrays must have the same shape -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var ndarray = require( '@stdlib/ndarray-ctor' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarrays: -* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' ); -* var y = ndarray( 'float64', ybuf, shape, sy, oy, 'row-major' ); -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -declare function map( arrays: ArrayLike>, fcn: Callback, thisArg?: ThisParameterType> ): void; - - -// EXPORTS // - -export = map; diff --git a/index.mjs b/index.mjs deleted file mode 100644 index 94eda17..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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-strides2order@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import y from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var v="throw";var m="throw";var u=[function(r,s,f,o){s.data[s.offset]=f.call(o,r.data[r.offset],[],r.ref)},function(r,s,f,o){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=s.strides[0],c=r.offset,n=s.offset,e=r.data,t=s.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(xr0;)for(ur0;)for(mr0;)for(vr0;)for(yr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(mr0;)for(vr0;)for(yr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind from '@stdlib/ndarray-base-vind2bind';\nimport ind2sub from '@stdlib/ndarray-base-ind2sub';\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar ord;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tord = strides2order( x.strides );\n\tif ( iox !== 0 && ioy !== 0 && ord === strides2order( y.strides ) ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, ord === 1, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, ord === 1, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","isRowMajor","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","ord","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","strides2order","ordx","ordy","numel","order","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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AMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CACDvC,IAAM0C,EACNzC,IAAM0C,CACN,CAUX,ECjQA,SAAwBxD,EAAGC,EAAGC,EAAKC,GAClC,IAAIiE,EACA5D,EACAC,EACAC,EACAS,EACAY,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAhD,EACAS,EACAY,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAS,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAjC,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAnF,EACAC,EACAV,EACAW,EACAU,EACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACArC,GACAC,GACAgD,GACAC,GACA7D,GACAC,GACAC,GACAW,GACAQ,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAa,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACA5B,GA2BJ,IArBAvD,GADAuD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BK,GACPE,GAAKqD,GAAErD,GACPC,GAAKoD,GAAEpD,GACPJ,EAAMQ,EAASgD,GAAExD,KAGjB+C,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,GAAKzE,EAAEK,OACPqE,GAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMc,GAAG,GACTb,EAAMc,GAAG,GAGHgF,GAAKnF,EAAG,GAAImF,GAAK,GAUtB,IATKA,GAAKrC,GACTP,GAAK4C,GACLA,GAAK,IAEL5C,GAAKO,EACLqC,IAAMrC,GAEPmC,EAAM9B,GAAOgC,GAAGjF,GAAG,GACnBgF,EAAM9B,GAAO+B,GAAGhF,GAAG,GACb6E,GAAKhF,EAAG,GAAIgF,GAAK,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sB,EACNrB,IAAMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CACDvC,IAAM0C,EACNzC,IAAM0C,CACN,CAUX,ECvQA,SAAwBxD,EAAGC,EAAGC,EAAKC,GAClC,IAAIiE,EACA5D,EACAC,EACAwD,EACAC,EACAxD,EACAS,EACAY,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAhD,EACAS,EACAY,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAS,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAjC,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAnF,EACAC,EACAV,EACAW,GACAU,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACArC,GACAC,GACAgD,GACAC,GACA7D,GACAC,GACAC,GACAW,GACAQ,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAa,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACA5B,GA+BJ,IAzBAvD,GADAuD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BK,GACPE,GAAKqD,GAAErD,GACPC,GAAKoD,GAAEpD,GACPJ,EAAMQ,EAASgD,GAAExD,KAGjB+C,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,GAAKzE,EAAEK,OACPqE,GAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMc,GAAG,GACTb,EAAMc,GAAG,GAGTwC,EAAMjE,EAAEgE,UAAU,GAClBE,EAAMjE,EAAE+D,UAAU,GAGZyC,GAAKnF,EAAG,GAAImF,GAAK,GAUtB,IATKA,GAAKrC,GACTP,GAAK4C,GACLA,GAAK,IAEL5C,GAAKO,EACLqC,IAAMrC,GAEPmC,EAAM9B,GAAOgC,GAAGjF,GAAG,GACnBgF,EAAM9B,GAAO+B,GAAGhF,GAAG,GACb6E,GAAKhF,EAAG,GAAIgF,GAAK,GAYtB,IAXKA,GAAKlC,GACTX,GAAK6C,GACLA,GAAK,IAEL7C,GAAKW,EACLkC,IAAMlC,GAEPT,EAAMnC,GAAG,GAAOiC,GAAGjC,GAAG,GACtBoC,EAAMnC,GAAG,GAAOgC,GAAGhC,GAAG,GACtB2E,EAAMG,EAAQD,GAAG9E,GAAG,GACpB6E,EAAMG,EAAQF,GAAG7E,GAAG,GACd0E,GAAK7E,EAAG,GAAI6E,GAAK,GAYtB,IAXKA,GAAK/B,GACTf,GAAK8C,GACLA,GAAK,IAEL9C,GAAKe,EACL+B,IAAM/B,GAEPb,EAAM/B,GAAG,GAAO6B,GAAG7B,GAAG,GACtBgC,EAAM/B,GAAG,GAAO4B,GAAG5B,GAAG,GACtBwE,EAAMG,EAAQD,GAAG3E,GAAG,GACpB0E,EAAMG,EAAQF,GAAG1E,GAAG,GACduE,GAAK1E,EAAG,GAAI0E,GAAK,GAYtB,IAXKA,GAAK5B,GACTnB,GAAK+C,GACLA,GAAK,IAEL/C,GAAKmB,EACL4B,IAAM5B,GAEPjB,EAAM3B,GAAG,GAAOyB,GAAGzB,GAAG,GACtB4B,EAAM3B,GAAG,GAAOwB,GAAGxB,GAAG,GACtBqE,EAAMG,EAAQD,GAAGxE,GAAG,GACpBuE,EAAMG,EAAQF,GAAGvE,GAAG,GACdoE,GAAKvE,EAAG,GAAIuE,GAAK,GAYtB,IAXKA,GAAKzB,GACTvB,GAAKgD,GACLA,GAAK,IAELhD,GAAKuB,EACLyB,IAAMzB,GAEPrB,EAAMvB,GAAG,GAAOqB,GAAGrB,GAAG,GACtBwB,EAAMvB,GAAG,GAAOoB,GAAGpB,GAAG,GACtBkE,EAAMG,EAAQD,GAAGrE,GAAG,GACpBoE,EAAMG,EAAQF,GAAGpE,GAAG,GACdiE,GAAKpE,EAAG,GAAIoE,GAAK,GAYtB,IAXKA,GAAKtB,GACT3B,GAAKiD,GACLA,GAAK,IAELjD,GAAK2B,EACLsB,IAAMtB,GAEPzB,EAAMnB,GAAG,GAAOiB,GAAGjB,GAAG,GACtBoB,EAAMnB,GAAG,GAAOgB,GAAGhB,GAAG,GACtB+D,EAAMG,EAAQD,GAAGlE,GAAG,GACpBiE,EAAMG,EAAQF,GAAGjE,GAAG,GACd8D,GAAKjE,EAAG,GAAIiE,GAAK,GAYtB,IAXKA,GAAKnB,GACT/B,GAAKkD,GACLA,GAAK,IAELlD,GAAK+B,EACLmB,IAAMnB,GAEP7B,EAAMf,GAAG,GAAOa,GAAGb,GAAG,GACtBgB,EAAMf,GAAG,GAAOY,GAAGZ,GAAG,GACtB4D,EAAMG,EAAQD,GAAG/D,GAAG,GACpB8D,EAAMG,EAAQF,GAAG9D,GAAG,GACd2D,GAAK9D,EAAG,GAAI8D,GAAK,GAYtB,IAXKA,GAAKhB,GACTnC,GAAKmD,GACLA,GAAK,IAELnD,GAAKmC,EACLgB,IAAMhB,GAEPjC,EAAMX,GAAG,GAAOS,GAAGT,GAAG,GACtBY,EAAMX,GAAG,GAAOQ,GAAGR,GAAG,GACtBwD,EAAMI,EAAQD,GAAG5D,GAAG,GACpB0D,EAAMI,EAAQF,GAAG3D,GAAG,GACdmD,GAAKtD,EAAG,GAAIsD,GAAK,GAYtB,IAXKA,GAAKR,GACT7C,GAAKqD,GACLA,GAAK,IAELrD,GAAK6C,EACLQ,IAAMR,GAEPrC,EAAMP,GAAG,GAAOD,GAAGC,GAAG,GACtBQ,EAAMP,GAAG,GAAOF,GAAGE,GAAG,GACtB4C,EAAMY,EAAQL,GAAGpD,GAAG,GACpB8C,EAAMY,EAAQN,GAAGnD,GAAG,GACdkD,GAAKrD,EAAG,GAAIqD,GAAK,GAiBtB,IAhBKA,GAAKP,GACTxD,EAAK+D,GACLA,GAAK,IAEL/D,EAAKwD,EACLO,IAAMP,GAGPvD,GAAKwD,EAAQM,GAAGnD,GAAG,GACnBV,GAAKwD,EAAQK,GAAGlD,GAAG,GAGnBN,EAAMK,GAAG,GAAOZ,EAAGY,GAAG,GACtBJ,EAAMK,GAAG,GAAOb,EAAGa,GAAG,GAGhBqC,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMJ,GAAK,EAAGA,GAAKD,GAAIC,KAAO,CAC7B,IAAMR,GAAK,EAAGA,GAAKH,GAAIG,KAAO,CAC7B,IAAMX,GAAK,EAAGA,GAAKH,EAAIG,KACtBmD,EAAKzD,EAAMK,GAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,IAAMiB,EAAM,CAAE2E,GAAG3C,GAAIwC,GAAG5C,GAAIyC,GAAG7C,GAAI0C,GAAG9C,GAAI2C,GAAG/C,GAAI4C,GAAGhD,GAAI6C,GAAGjD,GAAI8C,GAAGlD,GAAI0C,GAAGlD,GAAIiD,GAAG5D,IAAMM,GAAOrB,EAAEO,MAC5IM,IAAMH,EACNI,IAAMH,EAEPE,IAAMM,EACNL,IAAMM,CACN,CACDP,IAAMkB,EACNjB,IAAMkB,CACN,CACDnB,IAAMsB,EACNrB,IAAMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CACDvC,IAAM0C,EACNzC,IAAM0C,CACN,CACD3C,IAAM8C,EACN7C,IAAM8C,CACN,CAWZ,GxCnSI+C,EAAW5G,EAAI6B,OAAQ,EAwE3B,SAASgF,EAAKC,EAAQ3G,EAAKC,GAC1B,IAAI2G,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACApH,EACAC,EACAoH,EACAC,EAUJ,GAPAtH,EAAIuH,EAAgBV,EAAQ,IAC5B5G,EAAIsH,EAAgBV,EAAQ,IAG5BE,EAAM/G,EAAEgB,MACRgG,EAAM/G,EAAEe,OACR8F,EAAQC,EAAInF,UACGoF,EAAIpF,OAClB,MAAM,IAAI4F,MAAO,oGAAoGV,EAAM,iBAAiBE,EAAIpF,OAAO,KAGxJ,GAAe,IAAVkF,EACJ,OAAK9G,EAAEyH,kBAAoBxH,EAAEwH,iBACrB1D,EAAc+C,GAAS9G,EAAGC,EAAGC,EAAKC,GAEnCJ,EAAK+G,GAAS9G,EAAGC,EAAGC,EAAKC,GAIjC,IADAgH,EAAM,EACAE,EAAI,EAAGA,EAAIP,EAAOO,IAAM,CAE7B,IADAC,EAAIP,EAAKM,MACEL,EAAKK,GACf,MAAM,IAAIG,MAAO,sDAGlBL,GAAOG,CACP,CAED,OAAa,IAARH,EAIU,IAAVL,EACC9G,EAAEyH,kBAAoBxH,EAAEwH,iBACrB1D,EAAc+C,GAAS9G,EAAGC,EAAGC,EAAKC,GAEnCJ,EAAK+G,GAAS9G,EAAGC,EAAGC,EAAKC,IAGjC8G,EAAMS,EAAgB1H,EAAEiB,SACxBiG,EAAMQ,EAAgBzH,EAAEgB,SAGxBmG,EAAMO,EAAe3H,EAAEiB,SACV,IAARgG,GAAqB,IAARC,GAAaE,IAAQO,EAAe1H,EAAEgB,UAElD6F,GAASH,EAER3G,EAAEyH,kBAAoBxH,EAAEwH,iBACrB1D,EAAc+C,GAAS9G,EAAGC,EAAW,IAARmH,EAAWlH,EAAKC,GAE9CJ,EAAK+G,GAAS9G,EAAGC,EAAW,IAARmH,EAAWlH,EAAKC,GAKxC2G,GAASH,EACR3G,EAAEyH,kBAAoBxH,EAAEwH,iBACrBf,EAAsBI,EAAM,GAAK9G,EAAGC,EAAGC,EAAKC,GAE7CgE,EAAa2C,EAAM,GAAK9G,EAAGC,EAAGC,EAAKC,GAGtCH,EAAEyH,kBAAoBxH,EAAEwH,iBF/I9B,SAAgBzH,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAmH,EACAC,EACAV,EACAlD,EACAC,EACA7C,EACAC,EACAE,EACAC,EACAgD,EACAC,EACA7D,EACAC,EACAuG,EA4BJ,IA1BA/F,EAAKtB,EAAEgB,MAGPmG,EAAMW,EAAOxG,GAGbd,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGToB,EAAKxB,EAAEiB,QACPQ,EAAKxB,EAAEgB,QAGPwD,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPuH,EAAO5H,EAAE+H,MACTF,EAAO5H,EAAE8H,MAGT9D,EAAMjE,EAAEgE,UAAW,GACnBE,EAAMjE,EAAE+D,UAAW,GAGbqD,EAAI,EAAGA,EAAIF,EAAKE,IACrBxG,EAAKmH,EAAW1G,EAAIE,EAAIiD,EAAImD,EAAMP,EAAGvH,GACrCgB,EAAKkH,EAAW1G,EAAIG,EAAIiD,EAAImD,EAAMR,EAAGvH,GACrCuB,EAAM4G,EAAS3G,EAAIE,EAAI,EAAGoG,EAAMP,EAAGvH,GACnCoE,EAAKzD,EAAMK,EAAIZ,EAAII,KAAMH,EAAS8D,EAAKzD,EAAMK,GAAMQ,EAAKrB,EAAEO,KAE5D,CE8FS2H,CAAelI,EAAGC,EAAGC,EAAKC,QDrKnC,SAAgBH,EAAGC,EAAGC,EAAKC,GAC1B,IAAIK,EACAC,EACAmH,EACAC,EACAV,EACA9F,EACAC,EACAE,EACAC,EACAgD,EACAC,EACA7D,EACAC,EACAuG,EAwBJ,IAtBA/F,EAAKtB,EAAEgB,MAGPmG,EAAMW,EAAOxG,GAGbd,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGToB,EAAKxB,EAAEiB,QACPQ,EAAKxB,EAAEgB,QAGPwD,EAAKzE,EAAEK,OACPqE,EAAKzE,EAAEI,OAGPuH,EAAO5H,EAAE+H,MACTF,EAAO5H,EAAE8H,MAGHV,EAAI,EAAGA,EAAIF,EAAKE,IACrBxG,EAAKmH,EAAW1G,EAAIE,EAAIiD,EAAImD,EAAMP,EAAGvH,GACrCgB,EAAKkH,EAAW1G,EAAIG,EAAIiD,EAAImD,EAAMR,EAAGvH,GACrCuB,EAAM4G,EAAS3G,EAAIE,EAAI,EAAGoG,EAAMP,EAAGvH,GACnCW,EAAMK,GAAOZ,EAAII,KAAMH,EAASK,EAAMK,GAAMQ,EAAKrB,EAAEO,IAErD,CC2HC4H,CAAOnI,EAAGC,EAAGC,EAAKC,SAtClB,CAuCD"} \ No newline at end of file diff --git a/stats.html b/stats.html deleted file mode 100644 index 3775751..0000000 --- a/stats.html +++ /dev/null @@ -1,4842 +0,0 @@ - - - - - - - - Rollup Visualizer - - - -
- - - - - From 5d2189ac10ddec5febf16648204e29ab53f56a41 Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Mon, 26 May 2025 02:23:48 +0000 Subject: [PATCH 32/32] 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 | 77 - CITATION.cff | 30 - CODE_OF_CONDUCT.md | 3 - CONTRIBUTING.md | 3 - Makefile | 534 -- README.md | 51 +- SECURITY.md | 5 - .../benchmark.10d_blocked_columnmajor.js | 148 - benchmark/benchmark.10d_blocked_rowmajor.js | 148 - benchmark/benchmark.10d_columnmajor.js | 148 - benchmark/benchmark.10d_rowmajor.js | 148 - benchmark/benchmark.11d_columnmajor.js | 148 - benchmark/benchmark.11d_rowmajor.js | 148 - benchmark/benchmark.1d_columnmajor.js | 137 - benchmark/benchmark.1d_rowmajor.js | 137 - benchmark/benchmark.2d_blocked_columnmajor.js | 149 - benchmark/benchmark.2d_blocked_rowmajor.js | 149 - benchmark/benchmark.2d_columnmajor.js | 149 - benchmark/benchmark.2d_rowmajor.js | 150 - benchmark/benchmark.2d_rowmajor_accessors.js | 177 - ...benchmark.2d_rowmajor_accessors_complex.js | 184 - benchmark/benchmark.3d_blocked_columnmajor.js | 149 - benchmark/benchmark.3d_blocked_rowmajor.js | 149 - benchmark/benchmark.3d_columnmajor.js | 149 - benchmark/benchmark.3d_rowmajor.js | 149 - benchmark/benchmark.4d_blocked_columnmajor.js | 148 - benchmark/benchmark.4d_blocked_rowmajor.js | 148 - benchmark/benchmark.4d_columnmajor.js | 148 - benchmark/benchmark.4d_rowmajor.js | 148 - benchmark/benchmark.5d_blocked_columnmajor.js | 148 - benchmark/benchmark.5d_blocked_rowmajor.js | 148 - benchmark/benchmark.5d_columnmajor.js | 148 - benchmark/benchmark.5d_rowmajor.js | 148 - benchmark/benchmark.6d_blocked_columnmajor.js | 148 - benchmark/benchmark.6d_blocked_rowmajor.js | 148 - benchmark/benchmark.6d_columnmajor.js | 148 - benchmark/benchmark.6d_rowmajor.js | 148 - benchmark/benchmark.7d_blocked_columnmajor.js | 148 - benchmark/benchmark.7d_blocked_rowmajor.js | 148 - benchmark/benchmark.7d_columnmajor.js | 148 - benchmark/benchmark.7d_rowmajor.js | 148 - benchmark/benchmark.8d_blocked_columnmajor.js | 148 - benchmark/benchmark.8d_blocked_rowmajor.js | 148 - benchmark/benchmark.8d_columnmajor.js | 148 - benchmark/benchmark.8d_rowmajor.js | 148 - benchmark/benchmark.9d_blocked_columnmajor.js | 148 - benchmark/benchmark.9d_blocked_rowmajor.js | 148 - benchmark/benchmark.9d_columnmajor.js | 148 - benchmark/benchmark.9d_rowmajor.js | 148 - branches.md | 56 - dist/index.d.ts | 3 - dist/index.js | 19 - dist/index.js.map | 7 - docs/repl.txt | 78 - docs/types/test.ts | 128 - examples/index.js | 50 - docs/types/index.d.ts => index.d.ts | 2 +- index.mjs | 4 + index.mjs.map | 1 + lib/0d.js | 100 - lib/0d_accessors.js | 121 - lib/10d.js | 281 - lib/10d_accessors.js | 308 -- lib/10d_blocked.js | 389 -- lib/10d_blocked_accessors.js | 416 -- lib/1d.js | 129 - lib/1d_accessors.js | 156 - lib/2d.js | 167 - lib/2d_accessors.js | 194 - lib/2d_blocked.js | 195 - lib/2d_blocked_accessors.js | 222 - lib/3d.js | 181 - lib/3d_accessors.js | 208 - lib/3d_blocked.js | 221 - lib/3d_blocked_accessors.js | 248 - lib/4d.js | 195 - lib/4d_accessors.js | 222 - lib/4d_blocked.js | 245 - lib/4d_blocked_accessors.js | 272 - lib/5d.js | 209 - lib/5d_accessors.js | 236 - lib/5d_blocked.js | 269 - lib/5d_blocked_accessors.js | 296 - lib/6d.js | 225 - lib/6d_accessors.js | 252 - lib/6d_blocked.js | 293 - lib/6d_blocked_accessors.js | 320 -- lib/7d.js | 239 - lib/7d_accessors.js | 266 - lib/7d_blocked.js | 317 -- lib/7d_blocked_accessors.js | 344 -- lib/8d.js | 253 - lib/8d_accessors.js | 280 - lib/8d_blocked.js | 341 -- lib/8d_blocked_accessors.js | 368 -- lib/9d.js | 267 - lib/9d_accessors.js | 294 - lib/9d_blocked.js | 365 -- lib/9d_blocked_accessors.js | 392 -- lib/index.js | 81 - lib/main.js | 278 - lib/nd.js | 154 - lib/nd_accessors.js | 181 - package.json | 94 +- stats.html | 4842 +++++++++++++++++ test/dist/test.js | 33 - test/test.0d.js | 89 - test/test.10d.js | 2667 --------- test/test.1d.js | 134 - test/test.2d.js | 1195 ---- test/test.3d.js | 1331 ----- test/test.4d.js | 1503 ----- test/test.5d.js | 1740 ------ test/test.6d.js | 1892 ------- test/test.7d.js | 2099 ------- test/test.8d.js | 2221 -------- test/test.9d.js | 2447 --------- test/test.js | 139 - test/test.nd.js | 822 --- 139 files changed, 4872 insertions(+), 39399 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.10d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.10d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.10d_columnmajor.js delete mode 100644 benchmark/benchmark.10d_rowmajor.js delete mode 100644 benchmark/benchmark.11d_columnmajor.js delete mode 100644 benchmark/benchmark.11d_rowmajor.js delete mode 100644 benchmark/benchmark.1d_columnmajor.js delete mode 100644 benchmark/benchmark.1d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.2d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.2d_columnmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors.js delete mode 100644 benchmark/benchmark.2d_rowmajor_accessors_complex.js delete mode 100644 benchmark/benchmark.3d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.3d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.3d_columnmajor.js delete mode 100644 benchmark/benchmark.3d_rowmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.4d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.4d_columnmajor.js delete mode 100644 benchmark/benchmark.4d_rowmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.5d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.5d_columnmajor.js delete mode 100644 benchmark/benchmark.5d_rowmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.6d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.6d_columnmajor.js delete mode 100644 benchmark/benchmark.6d_rowmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.7d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.7d_columnmajor.js delete mode 100644 benchmark/benchmark.7d_rowmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.8d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.8d_columnmajor.js delete mode 100644 benchmark/benchmark.8d_rowmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_columnmajor.js delete mode 100644 benchmark/benchmark.9d_blocked_rowmajor.js delete mode 100644 benchmark/benchmark.9d_columnmajor.js delete mode 100644 benchmark/benchmark.9d_rowmajor.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 (97%) create mode 100644 index.mjs create mode 100644 index.mjs.map delete mode 100644 lib/0d.js delete mode 100644 lib/0d_accessors.js delete mode 100644 lib/10d.js delete mode 100644 lib/10d_accessors.js delete mode 100644 lib/10d_blocked.js delete mode 100644 lib/10d_blocked_accessors.js delete mode 100644 lib/1d.js delete mode 100644 lib/1d_accessors.js delete mode 100644 lib/2d.js delete mode 100644 lib/2d_accessors.js delete mode 100644 lib/2d_blocked.js delete mode 100644 lib/2d_blocked_accessors.js delete mode 100644 lib/3d.js delete mode 100644 lib/3d_accessors.js delete mode 100644 lib/3d_blocked.js delete mode 100644 lib/3d_blocked_accessors.js delete mode 100644 lib/4d.js delete mode 100644 lib/4d_accessors.js delete mode 100644 lib/4d_blocked.js delete mode 100644 lib/4d_blocked_accessors.js delete mode 100644 lib/5d.js delete mode 100644 lib/5d_accessors.js delete mode 100644 lib/5d_blocked.js delete mode 100644 lib/5d_blocked_accessors.js delete mode 100644 lib/6d.js delete mode 100644 lib/6d_accessors.js delete mode 100644 lib/6d_blocked.js delete mode 100644 lib/6d_blocked_accessors.js delete mode 100644 lib/7d.js delete mode 100644 lib/7d_accessors.js delete mode 100644 lib/7d_blocked.js delete mode 100644 lib/7d_blocked_accessors.js delete mode 100644 lib/8d.js delete mode 100644 lib/8d_accessors.js delete mode 100644 lib/8d_blocked.js delete mode 100644 lib/8d_blocked_accessors.js delete mode 100644 lib/9d.js delete mode 100644 lib/9d_accessors.js delete mode 100644 lib/9d_blocked.js delete mode 100644 lib/9d_blocked_accessors.js delete mode 100644 lib/index.js delete mode 100644 lib/main.js delete mode 100644 lib/nd.js delete mode 100644 lib/nd_accessors.js create mode 100644 stats.html delete mode 100644 test/dist/test.js delete mode 100644 test/test.0d.js delete mode 100644 test/test.10d.js delete mode 100644 test/test.1d.js delete mode 100644 test/test.2d.js delete mode 100644 test/test.3d.js delete mode 100644 test/test.4d.js delete mode 100644 test/test.5d.js delete mode 100644 test/test.6d.js delete mode 100644 test/test.7d.js delete mode 100644 test/test.8d.js delete mode 100644 test/test.9d.js delete mode 100644 test/test.js delete mode 100644 test/test.nd.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 8dfce50..0000000 --- a/.github/.keepalive +++ /dev/null @@ -1 +0,0 @@ -2025-05-26T01:39:02.447Z diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index a1f1421..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/ndarray/base/map) 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 0696b91..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/ndarray/base/map) 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 1c89592..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: '29 17 * * 1' - - # 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 + + ```
@@ -214,7 +205,7 @@ console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); ## 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.10d_blocked_columnmajor.js b/benchmark/benchmark.10d_blocked_columnmajor.js deleted file mode 100644 index d0903eb..0000000 --- a/benchmark/benchmark.10d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_blocked_rowmajor.js b/benchmark/benchmark.10d_blocked_rowmajor.js deleted file mode 100644 index 623a672..0000000 --- a/benchmark/benchmark.10d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_columnmajor.js b/benchmark/benchmark.10d_columnmajor.js deleted file mode 100644 index 3d63c6a..0000000 --- a/benchmark/benchmark.10d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.10d_rowmajor.js b/benchmark/benchmark.10d_rowmajor.js deleted file mode 100644 index 52addf9..0000000 --- a/benchmark/benchmark.10d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/10d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/10.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 9 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_columnmajor.js b/benchmark/benchmark.11d_columnmajor.js deleted file mode 100644 index eeb5347..0000000 --- a/benchmark/benchmark.11d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.11d_rowmajor.js b/benchmark/benchmark.11d_rowmajor.js deleted file mode 100644 index 6d26910..0000000 --- a/benchmark/benchmark.11d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/nd.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/11.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 10 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_columnmajor.js b/benchmark/benchmark.1d_columnmajor.js deleted file mode 100644 index 8f6bab0..0000000 --- a/benchmark/benchmark.1d_columnmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.1d_rowmajor.js b/benchmark/benchmark.1d_rowmajor.js deleted file mode 100644 index e626ef1..0000000 --- a/benchmark/benchmark.1d_rowmajor.js +++ /dev/null @@ -1,137 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( [ x, y ], identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_columnmajor.js b/benchmark/benchmark.2d_blocked_columnmajor.js deleted file mode 100644 index c1023b7..0000000 --- a/benchmark/benchmark.2d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_blocked_rowmajor.js b/benchmark/benchmark.2d_blocked_rowmajor.js deleted file mode 100644 index 486875c..0000000 --- a/benchmark/benchmark.2d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_columnmajor.js b/benchmark/benchmark.2d_columnmajor.js deleted file mode 100644 index 2337425..0000000 --- a/benchmark/benchmark.2d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor.js b/benchmark/benchmark.2d_rowmajor.js deleted file mode 100644 index 1a3c39c..0000000 --- a/benchmark/benchmark.2d_rowmajor.js +++ /dev/null @@ -1,150 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors.js b/benchmark/benchmark.2d_rowmajor_accessors.js deleted file mode 100644 index f70f8dc..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors.js +++ /dev/null @@ -1,177 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf[ idx ]; -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf[ idx ] = value; -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.2d_rowmajor_accessors_complex.js b/benchmark/benchmark.2d_rowmajor_accessors_complex.js deleted file mode 100644 index aea8f4b..0000000 --- a/benchmark/benchmark.2d_rowmajor_accessors_complex.js +++ /dev/null @@ -1,184 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var sqrt = require( '@stdlib/math-base-special-sqrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var ctors = require( '@stdlib/array-typed-complex-ctors' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/2d_accessors.js' ); - - -// VARIABLES // - -var types = [ 'complex64' ]; -var order = 'row-major'; -var abtype = { - 'complex64': 'float32', - 'complex128': 'float64' -}; - - -// FUNCTIONS // - -/** -* Returns an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @returns {*} element -*/ -function get( buf, idx ) { - return buf.get( idx ); -} - -/** -* Sets an array data buffer element. -* -* @private -* @param {Collection} buf - data buffer -* @param {NonNegativeInteger} idx - element index -* @param {*} value - value to set -*/ -function set( buf, idx, value ) { - buf.set( value, idx ); -} - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var xbuf; - var ybuf; - var x; - var y; - - xbuf = filledarrayBy( len*2, abtype[ xtype ], discreteUniform( -100, 100 ) ); // eslint-disable-line max-len - ybuf = filledarray( 0.0, len*2, abtype[ ytype ] ); - x = { - 'dtype': xtype, - 'data': new ( ctors( xtype ) )( xbuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - y = { - 'dtype': ytype, - 'data': new ( ctors( ytype ) )( ybuf.buffer ), - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order, - 'accessorProtocol': true, - 'accessors': [ get, set ] - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( ybuf[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 5; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( sqrt( len ) ); - sh = [ len, len ]; - len *= len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::accessors:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_columnmajor.js b/benchmark/benchmark.3d_blocked_columnmajor.js deleted file mode 100644 index 2193d3d..0000000 --- a/benchmark/benchmark.3d_blocked_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_blocked_rowmajor.js b/benchmark/benchmark.3d_blocked_rowmajor.js deleted file mode 100644 index ae68ae6..0000000 --- a/benchmark/benchmark.3d_blocked_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_columnmajor.js b/benchmark/benchmark.3d_columnmajor.js deleted file mode 100644 index 719ade5..0000000 --- a/benchmark/benchmark.3d_columnmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.3d_rowmajor.js b/benchmark/benchmark.3d_rowmajor.js deleted file mode 100644 index 0bbbb40..0000000 --- a/benchmark/benchmark.3d_rowmajor.js +++ /dev/null @@ -1,149 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var cbrt = require( '@stdlib/math-base-special-cbrt' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/3d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( cbrt( len ) ); - sh = [ len, len, len ]; - len *= len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_columnmajor.js b/benchmark/benchmark.4d_blocked_columnmajor.js deleted file mode 100644 index ed280cc..0000000 --- a/benchmark/benchmark.4d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_blocked_rowmajor.js b/benchmark/benchmark.4d_blocked_rowmajor.js deleted file mode 100644 index ea544a6..0000000 --- a/benchmark/benchmark.4d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_columnmajor.js b/benchmark/benchmark.4d_columnmajor.js deleted file mode 100644 index bc7d32e..0000000 --- a/benchmark/benchmark.4d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.4d_rowmajor.js b/benchmark/benchmark.4d_rowmajor.js deleted file mode 100644 index bd1fb1c..0000000 --- a/benchmark/benchmark.4d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/4d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/4.0 ) ); - sh = [ len, len, len, len ]; - len *= len * len * len; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_columnmajor.js b/benchmark/benchmark.5d_blocked_columnmajor.js deleted file mode 100644 index 13f1278..0000000 --- a/benchmark/benchmark.5d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_blocked_rowmajor.js b/benchmark/benchmark.5d_blocked_rowmajor.js deleted file mode 100644 index 8e68348..0000000 --- a/benchmark/benchmark.5d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_columnmajor.js b/benchmark/benchmark.5d_columnmajor.js deleted file mode 100644 index d432997..0000000 --- a/benchmark/benchmark.5d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.5d_rowmajor.js b/benchmark/benchmark.5d_rowmajor.js deleted file mode 100644 index 101f685..0000000 --- a/benchmark/benchmark.5d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/5d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/5.0 ) ); - sh = [ len, len, len, len, len ]; - len *= pow( len, 4 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_columnmajor.js b/benchmark/benchmark.6d_blocked_columnmajor.js deleted file mode 100644 index 6394204..0000000 --- a/benchmark/benchmark.6d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_blocked_rowmajor.js b/benchmark/benchmark.6d_blocked_rowmajor.js deleted file mode 100644 index a7c75b2..0000000 --- a/benchmark/benchmark.6d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_columnmajor.js b/benchmark/benchmark.6d_columnmajor.js deleted file mode 100644 index 0788a72..0000000 --- a/benchmark/benchmark.6d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.6d_rowmajor.js b/benchmark/benchmark.6d_rowmajor.js deleted file mode 100644 index 3fa5a61..0000000 --- a/benchmark/benchmark.6d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/6d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/6.0 ) ); - sh = [ len, len, len, len, len, len ]; - len *= pow( len, 5 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_columnmajor.js b/benchmark/benchmark.7d_blocked_columnmajor.js deleted file mode 100644 index 9833b60..0000000 --- a/benchmark/benchmark.7d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_blocked_rowmajor.js b/benchmark/benchmark.7d_blocked_rowmajor.js deleted file mode 100644 index 6811333..0000000 --- a/benchmark/benchmark.7d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_columnmajor.js b/benchmark/benchmark.7d_columnmajor.js deleted file mode 100644 index be78749..0000000 --- a/benchmark/benchmark.7d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.7d_rowmajor.js b/benchmark/benchmark.7d_rowmajor.js deleted file mode 100644 index 79843a7..0000000 --- a/benchmark/benchmark.7d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/7d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/7.0 ) ); - sh = [ len, len, len, len, len, len, len ]; - len *= pow( len, 6 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_columnmajor.js b/benchmark/benchmark.8d_blocked_columnmajor.js deleted file mode 100644 index eeb2f7c..0000000 --- a/benchmark/benchmark.8d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_blocked_rowmajor.js b/benchmark/benchmark.8d_blocked_rowmajor.js deleted file mode 100644 index 1899e0b..0000000 --- a/benchmark/benchmark.8d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_columnmajor.js b/benchmark/benchmark.8d_columnmajor.js deleted file mode 100644 index e6902ea..0000000 --- a/benchmark/benchmark.8d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.8d_rowmajor.js b/benchmark/benchmark.8d_rowmajor.js deleted file mode 100644 index 519c62f..0000000 --- a/benchmark/benchmark.8d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/8d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/8.0 ) ); - sh = [ len, len, len, len, len, len, len, len ]; - len *= pow( len, 7 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_columnmajor.js b/benchmark/benchmark.9d_blocked_columnmajor.js deleted file mode 100644 index 1579f28..0000000 --- a/benchmark/benchmark.9d_blocked_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_blocked_rowmajor.js b/benchmark/benchmark.9d_blocked_rowmajor.js deleted file mode 100644 index 1b8469f..0000000 --- a/benchmark/benchmark.9d_blocked_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d_blocked.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+'::blocked:ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_columnmajor.js b/benchmark/benchmark.9d_columnmajor.js deleted file mode 100644 index 5039b2f..0000000 --- a/benchmark/benchmark.9d_columnmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'column-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/benchmark/benchmark.9d_rowmajor.js b/benchmark/benchmark.9d_rowmajor.js deleted file mode 100644 index 181f6df..0000000 --- a/benchmark/benchmark.9d_rowmajor.js +++ /dev/null @@ -1,148 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench-harness' ); -var isnan = require( '@stdlib/math-base-assert-is-nan' ); -var pow = require( '@stdlib/math-base-special-pow' ); -var floor = require( '@stdlib/math-base-special-floor' ); -var identity = require( '@stdlib/number-float64-base-identity' ); -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var pkg = require( './../package.json' ).name; -var map = require( './../lib/9d.js' ); - - -// VARIABLES // - -var types = [ 'float64' ]; -var order = 'row-major'; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} len - ndarray length -* @param {NonNegativeIntegerArray} shape - ndarray shape -* @param {string} xtype - input ndarray data type -* @param {string} ytype - output ndarray data type -* @returns {Function} benchmark function -*/ -function createBenchmark( len, shape, xtype, ytype ) { - var x; - var y; - - x = filledarrayBy( len, xtype, discreteUniform( -100, 100 ) ); - y = filledarray( 0.0, len, ytype ); - x = { - 'dtype': xtype, - 'data': x, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - y = { - 'dtype': ytype, - 'data': y, - 'shape': shape, - 'strides': shape2strides( shape, order ), - 'offset': 0, - 'order': order - }; - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - map( x, y, identity ); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y.data[ i%len ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var len; - var min; - var max; - var sh; - var t1; - var t2; - var f; - var i; - var j; - - min = 1; // 10^min - max = 6; // 10^max - - for ( j = 0; j < types.length; j++ ) { - t1 = types[ j ]; - t2 = types[ j ]; - for ( i = min; i <= max; i++ ) { - len = pow( 10, i ); - - sh = [ len/2, 2, 1, 1, 1, 1, 1, 1, 1 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - sh = [ 1, 1, 1, 1, 1, 1, 1, 2, len/2 ]; - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - - len = floor( pow( len, 1.0/9.0 ) ); - sh = [ len, len, len, len, len, len, len, len, len ]; - len *= pow( len, 8 ); - f = createBenchmark( len, sh, t1, t2 ); - bench( pkg+':ndims='+sh.length+',len='+len+',shape=['+sh.join(',')+'],xorder='+order+',yorder='+order+',xtype='+t1+',ytype='+t2, f ); - } - } -} - -main(); diff --git a/branches.md b/branches.md deleted file mode 100644 index 458a893..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/ndarray/base/map" -%% click B href "https://github.com/stdlib-js/ndarray-base-map/tree/main" -%% click C href "https://github.com/stdlib-js/ndarray-base-map/tree/production" -%% click D href "https://github.com/stdlib-js/ndarray-base-map/tree/esm" -%% click E href "https://github.com/stdlib-js/ndarray-base-map/tree/deno" -%% click F href "https://github.com/stdlib-js/ndarray-base-map/tree/umd" -``` - -[stdlib-url]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/map -[production-url]: https://github.com/stdlib-js/ndarray-base-map/tree/production -[deno-url]: https://github.com/stdlib-js/ndarray-base-map/tree/deno -[deno-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/deno/README.md -[umd-url]: https://github.com/stdlib-js/ndarray-base-map/tree/umd -[umd-readme]: https://github.com/stdlib-js/ndarray-base-map/blob/umd/README.md -[esm-url]: https://github.com/stdlib-js/ndarray-base-map/tree/esm -[esm-readme]: https://github.com/stdlib-js/ndarray-base-map/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 4504e2e..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -import map from '../docs/types/index'; -export = map; \ No newline at end of file diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index e2fc6d8..0000000 --- a/dist/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict";var lr=function(a,v){return function(){return v||a((v={exports:{}}).exports,v),v.exports}};var Rr=lr(function(g0,Lr){"use strict";var jv=require("@stdlib/ndarray-base-unary-loop-interchange-order"),mv=require("@stdlib/ndarray-base-unary-tiling-block-size"),kv=require("@stdlib/array-base-take-indexed"),zv=require("@stdlib/array-base-reverse");function gv(a,v,Y,U){var r,A,F,R,L,B,P,T,D,C,K,_,w,E,h,O,q,k,u,z,i,S,d,f,e,l;for(l=jv(a.shape,a.strides,v.strides),w=l.sh,O=l.sx,q=l.sy,C=zv(l.idx),r=mv(a.dtype,v.dtype),k=a.offset,u=v.offset,A=a.data,F=v.data,R=O[0],B=q[0],e=w[1];e>0;)for(e0;)for(f0;)for(b0;)for(c0;)for(o0;)for(m0;)for(M0;)for(n0;)for(t0;)for(N0;)for(G0;)for(H0;)for(Q0;)for(J0;)for(dr0;)for(ar0;)for($0;)for(Z0;)for(V0;)for(sr0;)for(fr0;)for(tr0;)for(ir0;)for(or0;)for(er0;)for(vr0;)for(rr0;)for(qr0;)for(xr0;)for(cr0;)for(ur0;)for(pr0;)for(Sr0;)for(yr0;)for(fr0;)for(zr0;)for(hr0;)for(br0;)for(mr0;)for(jr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(wr0;)for(Mr0;)for(Er0;)for(Pr0;)for(Tr0;)for(Or0;)for(gr0;)for(zr0;)for(hr0;)for(br0;)for(d0;)for(S0;)for(o0;)for(x0;)for(j0;)for(n0;)for(t0;)for(p0;)for(g0;)for(H0;)for(Q0;)for(J0;)for(I0;)for(X0;)for($0;)for(Z0;)for(V0;)for(sr0;)for(W0;)for(N0;)for(ir0;)for(or0;)for(er0;)for(vr0;)for(rr0;)for(dr0;)for(ar0;)for(cr0;)for(ur0;)for(pr0;)for(Sr0;)for(yr0;)for(fr0;)for(tr0;)for(ir0;)for(br0;)for(mr0;)for(jr0;)for(kr0;)for(nr0;)for(qr0;)for(xr0;)for(cr0;)for(ur0;)for(Er0;)for(Pr0;)for(Tr0;)for(Or0;)for(gr0;)for(zr0;)for(hr0;)for(br0;)for(mr0;)for(jr} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nvar loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );\nvar blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );\nvar take = require( '@stdlib/array-base-take-indexed' );\nvar reverse = require( '@stdlib/array-base-reverse' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = blockedmap10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Complex64Array = require( '@stdlib/array-complex64' );\n* var Complex64 = require( '@stdlib/complex-float32-ctor' );\n* var realf = require( '@stdlib/complex-float32-real' );\n* var imagf = require( '@stdlib/complex-float32-imag' );\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map0d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map1d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map2d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map3d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map4d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map5d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map6d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map7d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map8d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map9d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nvar zeroTo = require( '@stdlib/array-base-zero-to' );\nvar reverse = require( '@stdlib/array-base-reverse' );\nvar take = require( '@stdlib/array-base-take-indexed' );\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = map10d;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind = require( '@stdlib/ndarray-base-vind2bind' );\nvar ind2sub = require( '@stdlib/ndarray-base-ind2sub' );\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nmodule.exports = mapnd;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder = require( '@stdlib/ndarray-base-iteration-order' );\nvar strides2order = require( '@stdlib/ndarray-base-strides2order' );\nvar ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' );\nvar blockedaccessormap2d = require( './2d_blocked_accessors.js' );\nvar blockedaccessormap3d = require( './3d_blocked_accessors.js' );\nvar blockedaccessormap4d = require( './4d_blocked_accessors.js' );\nvar blockedaccessormap5d = require( './5d_blocked_accessors.js' );\nvar blockedaccessormap6d = require( './6d_blocked_accessors.js' );\nvar blockedaccessormap7d = require( './7d_blocked_accessors.js' );\nvar blockedaccessormap8d = require( './8d_blocked_accessors.js' );\nvar blockedaccessormap9d = require( './9d_blocked_accessors.js' );\nvar blockedaccessormap10d = require( './10d_blocked_accessors.js' );\nvar blockedmap2d = require( './2d_blocked.js' );\nvar blockedmap3d = require( './3d_blocked.js' );\nvar blockedmap4d = require( './4d_blocked.js' );\nvar blockedmap5d = require( './5d_blocked.js' );\nvar blockedmap6d = require( './6d_blocked.js' );\nvar blockedmap7d = require( './7d_blocked.js' );\nvar blockedmap8d = require( './8d_blocked.js' );\nvar blockedmap9d = require( './9d_blocked.js' );\nvar blockedmap10d = require( './10d_blocked.js' );\nvar accessormap0d = require( './0d_accessors.js' );\nvar accessormap1d = require( './1d_accessors.js' );\nvar accessormap2d = require( './2d_accessors.js' );\nvar accessormap3d = require( './3d_accessors.js' );\nvar accessormap4d = require( './4d_accessors.js' );\nvar accessormap5d = require( './5d_accessors.js' );\nvar accessormap6d = require( './6d_accessors.js' );\nvar accessormap7d = require( './7d_accessors.js' );\nvar accessormap8d = require( './8d_accessors.js' );\nvar accessormap9d = require( './9d_accessors.js' );\nvar accessormap10d = require( './10d_accessors.js' );\nvar accessormapnd = require( './nd_accessors.js' );\nvar map0d = require( './0d.js' );\nvar map1d = require( './1d.js' );\nvar map2d = require( './2d.js' );\nvar map3d = require( './3d.js' );\nvar map4d = require( './4d.js' );\nvar map5d = require( './5d.js' );\nvar map6d = require( './6d.js' );\nvar map7d = require( './7d.js' );\nvar map8d = require( './8d.js' );\nvar map9d = require( './9d.js' );\nvar map10d = require( './10d.js' );\nvar mapnd = require( './nd.js' );\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar ord;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tord = strides2order( x.strides );\n\tif ( iox !== 0 && ioy !== 0 && ord === strides2order( y.strides ) ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, ord === 1, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, ord === 1, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nmodule.exports = map;\n", "/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray.\n*\n* @module @stdlib/ndarray-base-map\n*\n* @example\n* var Float64Array = require( '@stdlib/array-float64' );\n* var map = require( '@stdlib/ndarray-base-map' );\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\n\n// MODULES //\n\nvar main = require( './main.js' );\n\n\n// EXPORTS //\n\nmodule.exports = main;\n"], - "mappings": "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", - "names": ["require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "get", "set", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "get", "set", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "set", "get", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked_accessors", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap2d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "ox1", "oy1", "idx", "sh", "s0", "s1", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "j0", "j1", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap3d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "ox1", "ox2", "oy1", "oy2", "idx", "sh", "s0", "s1", "s2", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "j0", "j1", "j2", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap4d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "ox1", "ox2", "ox3", "idx", "oy1", "oy2", "oy3", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "j0", "j1", "j2", "j3", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap5d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "ox1", "ox2", "ox3", "ox4", "idx", "oy1", "oy2", "oy3", "oy4", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "j0", "j1", "j2", "j3", "j4", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap6d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "ox1", "ox2", "ox3", "ox4", "ox5", "oy1", "oy2", "oy3", "oy4", "oy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "j0", "j1", "j2", "j3", "j4", "j5", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap7d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap8d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap9d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "o", "require_d_blocked", "__commonJSMin", "exports", "module", "loopOrder", "blockSize", "take", "reverse", "blockedmap10d", "x", "y", "fcn", "thisArg", "bsize", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "ox1", "ox2", "ox3", "ox4", "ox5", "ox6", "ox7", "ox8", "ox9", "oy1", "oy2", "oy3", "oy4", "oy5", "oy6", "oy7", "oy8", "oy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ox", "oy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "o", "require_d_accessors", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d_accessors", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "get", "set", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d_accessors", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "get", "set", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd_accessors", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "get", "set", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_d", "__commonJSMin", "exports", "module", "map0d", "x", "y", "fcn", "thisArg", "require_d", "__commonJSMin", "exports", "module", "map1d", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dy0", "S0", "ix", "iy", "i0", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map2d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dy0", "dy1", "idx", "sh", "S0", "S1", "sx", "sy", "ix", "iy", "i0", "i1", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map3d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dy0", "dy1", "dy2", "idx", "sh", "S0", "S1", "S2", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map4d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dy0", "dy1", "dy2", "dy3", "idx", "sh", "S0", "S1", "S2", "S3", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map5d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dy0", "dy1", "dy2", "dy3", "dy4", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map6d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map7d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map8d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map9d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "require_d", "__commonJSMin", "exports", "module", "zeroTo", "reverse", "take", "map10d", "x", "y", "isRowMajor", "fcn", "thisArg", "xbuf", "ybuf", "dx0", "dx1", "dx2", "dx3", "dx4", "dx5", "dx6", "dx7", "dx8", "dx9", "dy0", "dy1", "dy2", "dy3", "dy4", "dy5", "dy6", "dy7", "dy8", "dy9", "idx", "sh", "S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "sx", "sy", "ix", "iy", "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8", "i9", "require_nd", "__commonJSMin", "exports", "module", "numel", "vind2bind", "ind2sub", "MODE", "mapnd", "x", "y", "fcn", "thisArg", "xbuf", "ybuf", "ordx", "ordy", "len", "idx", "sh", "sx", "sy", "ox", "oy", "ix", "iy", "i", "require_main", "__commonJSMin", "exports", "module", "iterationOrder", "strides2order", "ndarray2object", "blockedaccessormap2d", "blockedaccessormap3d", "blockedaccessormap4d", "blockedaccessormap5d", "blockedaccessormap6d", "blockedaccessormap7d", "blockedaccessormap8d", "blockedaccessormap9d", "blockedaccessormap10d", "blockedmap2d", "blockedmap3d", "blockedmap4d", "blockedmap5d", "blockedmap6d", "blockedmap7d", "blockedmap8d", "blockedmap9d", "blockedmap10d", "accessormap0d", "accessormap1d", "accessormap2d", "accessormap3d", "accessormap4d", "accessormap5d", "accessormap6d", "accessormap7d", "accessormap8d", "accessormap9d", "accessormap10d", "accessormapnd", "map0d", "map1d", "map2d", "map3d", "map4d", "map5d", "map6d", "map7d", "map8d", "map9d", "map10d", "mapnd", "MAP", "ACCESSOR_MAP", "BLOCKED_MAP", "BLOCKED_ACCESSOR_MAP", "MAX_DIMS", "map", "arrays", "fcn", "thisArg", "ndims", "shx", "shy", "iox", "ioy", "len", "ord", "x", "y", "i", "d", "main"] -} diff --git a/docs/repl.txt b/docs/repl.txt deleted file mode 100644 index be30da1..0000000 --- a/docs/repl.txt +++ /dev/null @@ -1,78 +0,0 @@ - -{{alias}}( arrays, fcn[, thisArg] ) - Applies a callback function to elements in an input ndarray and assigns - results to elements in an output ndarray. - - Each provided "ndarray" should be an object with following properties: - - - dtype: data type. - - data: data buffer. - - shape: dimensions. - - strides: stride lengths. - - offset: index offset. - - order: specifies whether an ndarray is row-major (C-style) or column-major - (Fortran-style). - - The callback function is provided the following arguments: - - - value: current array element. - - indices: current array element indices. - - arr: the input ndarray. - - Parameters - ---------- - arrays: ArrayLikeObject - Array-like object containing one input ndarray and one output ndarray. - - fcn: Function - Callback function. - - thisArg: any (optional) - Callback function execution context. - - Examples - -------- - // Define ndarray data and meta data... - > var xbuf = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var ybuf = new {{alias:@stdlib/array/float64}}( [ 0.0, 0.0, 0.0, 0.0 ] ); - > var dtype = 'float64'; - > var shape = [ 2, 2 ]; - > var sx = [ 2, 1 ]; - > var sy = [ 2, 1 ]; - > var ox = 0; - > var oy = 0; - > var order = 'row-major'; - - // Define a callback function: - > function f( v ) { return v*10.0; }; - - // Using ndarrays... - > var x = {{alias:@stdlib/ndarray/ctor}}( dtype, xbuf, shape, sx, ox, order ); - > var y = {{alias:@stdlib/ndarray/ctor}}( dtype, ybuf, shape, sy, oy, order ); - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - // Using minimal ndarray-like objects... - > x = { - ... 'dtype': dtype, - ... 'data': xbuf, - ... 'shape': shape, - ... 'strides': sx, - ... 'offset': ox, - ... 'order': order - ... }; - > y = { - ... 'dtype': dtype, - ... 'data': ybuf, - ... 'shape': shape, - ... 'strides': sy, - ... 'offset': oy, - ... 'order': order - ... }; - > {{alias}}( [ x, y ], f ); - > y.data - [ 10.0, 20.0, 30.0, 40.0 ] - - See Also - -------- diff --git a/docs/types/test.ts b/docs/types/test.ts deleted file mode 100644 index 320d548..0000000 --- a/docs/types/test.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/// - -import { ndarray } from '@stdlib/types/ndarray'; -import map = require( './index' ); - -/** -* Mock function to create an ndarray-like object. -* -* @returns ndarray-like object -*/ -function array(): ndarray { - const obj: ndarray = { - 'byteLength': 80, - 'BYTES_PER_ELEMENT': 8, - 'data': new Float64Array( 10 ), - 'dtype': 'float64', - 'flags': { - 'ROW_MAJOR_CONTIGUOUS': true, - 'COLUMN_MAJOR_CONTIGUOUS': false - }, - 'length': 10, - 'ndims': 1, - 'offset': 0, - 'order': 'row-major', - 'shape': [ 10 ], - 'strides': [ 1 ], - 'get': (): number => 0, - 'set': (): ndarray => obj - }; - return obj; -} - -/** -* Evaluates the identity function. -* -* @param x - input value -* @returns input value -*/ -function identity( x: number ): number { - return x; -} - -// TESTS // - -// The function returns `undefined`... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, identity ); // $ExpectType void - map( arrays, identity, {} ); // $ExpectType void -} - -// The compiler throws an error if the function is provided a first argument which is not an array-like object containing ndarray-like objects... -{ - map( 5, identity ); // $ExpectError - map( true, identity ); // $ExpectError - map( false, identity ); // $ExpectError - map( null, identity ); // $ExpectError - map( undefined, identity ); // $ExpectError - map( {}, identity ); // $ExpectError - map( [ 1 ], identity ); // $ExpectError - map( ( x: number ): number => x, identity ); // $ExpectError - - map( 5, identity, {} ); // $ExpectError - map( true, identity, {} ); // $ExpectError - map( false, identity, {} ); // $ExpectError - map( null, identity, {} ); // $ExpectError - map( undefined, identity, {} ); // $ExpectError - map( {}, identity, {} ); // $ExpectError - map( [ 1 ], identity, {} ); // $ExpectError - map( ( x: number ): number => x, identity, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a callback function... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map( arrays, '10' ); // $ExpectError - map( arrays, 5 ); // $ExpectError - map( arrays, true ); // $ExpectError - map( arrays, false ); // $ExpectError - map( arrays, null ); // $ExpectError - map( arrays, undefined ); // $ExpectError - map( arrays, [] ); // $ExpectError - map( arrays, {} ); // $ExpectError - - map( arrays, '10', {} ); // $ExpectError - map( arrays, 5, {} ); // $ExpectError - map( arrays, true, {} ); // $ExpectError - map( arrays, false, {} ); // $ExpectError - map( arrays, null, {} ); // $ExpectError - map( arrays, undefined, {} ); // $ExpectError - map( arrays, [], {} ); // $ExpectError - map( arrays, {}, {} ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const x = array(); - const y = array(); - const arrays = [ x, y ]; - - map(); // $ExpectError - map( arrays ); // $ExpectError{ - map( arrays, identity, {}, {} ); // $ExpectError -} diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index d89ee00..0000000 --- a/examples/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var discreteUniform = require( '@stdlib/random-base-discrete-uniform' ).factory; -var filledarray = require( '@stdlib/array-filled' ); -var filledarrayBy = require( '@stdlib/array-filled-by' ); -var abs = require( '@stdlib/math-base-special-abs' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var ndarray2array = require( '@stdlib/ndarray-base-to-array' ); -var naryFunction = require( '@stdlib/utils-nary-function' ); -var map = require( './../lib' ); - -var N = 10; -var x = { - 'dtype': 'generic', - 'data': filledarrayBy( N, 'generic', discreteUniform( -100, 100 ) ), - 'shape': [ 5, 2 ], - 'strides': [ 2, 1 ], - 'offset': 0, - 'order': 'row-major' -}; -var y = { - 'dtype': 'generic', - 'data': filledarray( 0, N, 'generic' ), - 'shape': x.shape.slice(), - 'strides': shape2strides( x.shape, 'column-major' ), - 'offset': 0, - 'order': 'column-major' -}; - -map( [ x, y ], naryFunction( abs, 1 ) ); -console.log( ndarray2array( x.data, x.shape, x.strides, x.offset, x.order ) ); -console.log( ndarray2array( y.data, y.shape, y.strides, y.offset, y.order ) ); diff --git a/docs/types/index.d.ts b/index.d.ts similarity index 97% rename from docs/types/index.d.ts rename to index.d.ts index 78ac9b8..9dd6ef1 100644 --- a/docs/types/index.d.ts +++ b/index.d.ts @@ -18,7 +18,7 @@ // TypeScript Version: 4.1 -/// +/// import { ArrayLike } from '@stdlib/types/array'; import { typedndarray } from '@stdlib/types/ndarray'; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..92ac995 --- /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 r from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-iteration-order@v0.2.2-esm/index.mjs";import s from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-strides2order@v0.2.2-esm/index.mjs";import f from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ndarraylike2object@v0.2.2-esm/index.mjs";import o from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@v0.2.1-esm/index.mjs";import e from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@v0.2.2-esm/index.mjs";import t from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@esm/index.mjs";import a from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@v0.2.2-esm/index.mjs";import d from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-take-indexed@v0.2.2-esm/index.mjs";import i from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-loop-interchange-order@esm/index.mjs";import c from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-unary-tiling-block-size@esm/index.mjs";import n from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-reverse@esm/index.mjs";import l from"https://cdn.jsdelivr.net/gh/stdlib-js/array-base-zero-to@esm/index.mjs";import h from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-numel@esm/index.mjs";import p from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-vind2bind@esm/index.mjs";import y from"https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-base-ind2sub@esm/index.mjs";var v="throw";var m="throw";var u=[function(r,s,f,o){s.data[s.offset]=f.call(o,r.data[r.offset],[],r.ref)},function(r,s,f,o){var e,t,a,d,i,c,n,l;for(i=r.shape[0],a=r.strides[0],d=s.strides[0],c=r.offset,n=s.offset,e=r.data,t=s.data,l=0;l0;)for(C0;)for(B0;)for(K0;)for(J0;)for(I0;)for(S0;)for(R0;)for(Q0;)for(O0;)for(Z0;)for(Y0;)for(X0;)for(W0;)for(V0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(rr0;)for(_0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(ar0;)for(tr0;)for(xr0;)for(ur0;)for(mr0;)for(vr0;)for(yr0;)for(pr0;)for(hr0;)for(lr0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(F0;)for(D0;)for(M0;)for(L0;)for(K0;)for(U0;)for(T0;)for(S0;)for(R0;)for(_0;)for($0;)for(Z0;)for(Y0;)for(X0;)for(ar0;)for(tr0;)for(er0;)for(or0;)for(fr0;)for(sr0;)for(pr0;)for(hr0;)for(lr0;)for(nr0;)for(cr0;)for(ir0;)for(dr0;)for(gr0;)for(jr0;)for(xr0;)for(ur0;)for(mr0;)for(vr0;)for(yr0;)for(pr0;)for(Er0;)for(Ar0;)for(zr0;)for(wr0;)for(kr0;)for(Pr0;)for(br0;)for(gr0;)for(jr0;)for(Hr0;)for(Gr0;)for(Fr0;)for(Dr0;)for(Cr0;)for(Br0;)for(qr0;)for(Er0;)for(Ar0;)for(zr} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar get;\n\tvar set;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 vind2bind from '@stdlib/ndarray-base-vind2bind';\nimport ind2sub from '@stdlib/ndarray-base-ind2sub';\n\n\n// VARIABLES //\n\nvar MODE = 'throw';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* mapnd( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction mapnd( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar ordx;\n\tvar ordy;\n\tvar len;\n\tvar idx;\n\tvar sh;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i;\n\n\tsh = x.shape;\n\n\t// Compute the total number of elements over which to iterate:\n\tlen = numel( sh );\n\n\t// Cache references to the input and output ndarray data buffers:\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache references to the respective stride arrays:\n\tsx = x.strides;\n\tsy = y.strides;\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays:\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the respective array orders:\n\tordx = x.order;\n\tordy = y.order;\n\n\t// Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory...\n\tfor ( i = 0; i < len; i++ ) {\n\t\tix = vind2bind( sh, sx, ox, ordx, i, MODE );\n\t\tiy = vind2bind( sh, sy, oy, ordy, i, MODE );\n\t\tidx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref );\n\t}\n}\n\n\n// EXPORTS //\n\nexport default mapnd;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 iterationOrder from '@stdlib/ndarray-base-iteration-order';\nimport strides2order from '@stdlib/ndarray-base-strides2order';\nimport ndarray2object from '@stdlib/ndarray-base-ndarraylike2object';\nimport blockedaccessormap2d from './2d_blocked_accessors.js';\nimport blockedaccessormap3d from './3d_blocked_accessors.js';\nimport blockedaccessormap4d from './4d_blocked_accessors.js';\nimport blockedaccessormap5d from './5d_blocked_accessors.js';\nimport blockedaccessormap6d from './6d_blocked_accessors.js';\nimport blockedaccessormap7d from './7d_blocked_accessors.js';\nimport blockedaccessormap8d from './8d_blocked_accessors.js';\nimport blockedaccessormap9d from './9d_blocked_accessors.js';\nimport blockedaccessormap10d from './10d_blocked_accessors.js';\nimport blockedmap2d from './2d_blocked.js';\nimport blockedmap3d from './3d_blocked.js';\nimport blockedmap4d from './4d_blocked.js';\nimport blockedmap5d from './5d_blocked.js';\nimport blockedmap6d from './6d_blocked.js';\nimport blockedmap7d from './7d_blocked.js';\nimport blockedmap8d from './8d_blocked.js';\nimport blockedmap9d from './9d_blocked.js';\nimport blockedmap10d from './10d_blocked.js';\nimport accessormap0d from './0d_accessors.js';\nimport accessormap1d from './1d_accessors.js';\nimport accessormap2d from './2d_accessors.js';\nimport accessormap3d from './3d_accessors.js';\nimport accessormap4d from './4d_accessors.js';\nimport accessormap5d from './5d_accessors.js';\nimport accessormap6d from './6d_accessors.js';\nimport accessormap7d from './7d_accessors.js';\nimport accessormap8d from './8d_accessors.js';\nimport accessormap9d from './9d_accessors.js';\nimport accessormap10d from './10d_accessors.js';\nimport accessormapnd from './nd_accessors.js';\nimport map0d from './0d.js';\nimport map1d from './1d.js';\nimport map2d from './2d.js';\nimport map3d from './3d.js';\nimport map4d from './4d.js';\nimport map5d from './5d.js';\nimport map6d from './6d.js';\nimport map7d from './7d.js';\nimport map8d from './8d.js';\nimport map9d from './9d.js';\nimport map10d from './10d.js';\nimport mapnd from './nd.js';\n\n\n// VARIABLES //\n\nvar MAP = [\n\tmap0d,\n\tmap1d,\n\tmap2d,\n\tmap3d,\n\tmap4d,\n\tmap5d,\n\tmap6d,\n\tmap7d,\n\tmap8d,\n\tmap9d,\n\tmap10d\n];\nvar ACCESSOR_MAP = [\n\taccessormap0d,\n\taccessormap1d,\n\taccessormap2d,\n\taccessormap3d,\n\taccessormap4d,\n\taccessormap5d,\n\taccessormap6d,\n\taccessormap7d,\n\taccessormap8d,\n\taccessormap9d,\n\taccessormap10d\n];\nvar BLOCKED_MAP = [\n\tblockedmap2d, // 0\n\tblockedmap3d,\n\tblockedmap4d,\n\tblockedmap5d,\n\tblockedmap6d,\n\tblockedmap7d,\n\tblockedmap8d,\n\tblockedmap9d,\n\tblockedmap10d // 8\n];\nvar BLOCKED_ACCESSOR_MAP = [\n\tblockedaccessormap2d, // 0\n\tblockedaccessormap3d,\n\tblockedaccessormap4d,\n\tblockedaccessormap5d,\n\tblockedaccessormap6d,\n\tblockedaccessormap7d,\n\tblockedaccessormap8d,\n\tblockedaccessormap9d,\n\tblockedaccessormap10d // 8\n];\nvar MAX_DIMS = MAP.length -1;\n\n\n// MAIN //\n\n/**\n* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray.\n*\n* ## Notes\n*\n* - Each provided ndarray should be an `object` with the following properties:\n*\n* - **dtype**: data type.\n* - **data**: data buffer.\n* - **shape**: dimensions.\n* - **strides**: stride lengths.\n* - **offset**: index offset.\n* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style).\n*\n* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array\n* @param {Callback} fcn - callback function\n* @param {*} [thisArg] - callback execution context\n* @throws {Error} arrays must have the same number of dimensions\n* @throws {Error} arrays must have the same shape\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map( [ x, y ], scale );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map( arrays, fcn, thisArg ) {\n\tvar ndims;\n\tvar shx;\n\tvar shy;\n\tvar iox;\n\tvar ioy;\n\tvar len;\n\tvar ord;\n\tvar x;\n\tvar y;\n\tvar i;\n\tvar d;\n\n\t// Unpack the ndarrays and standardize ndarray meta data:\n\tx = ndarray2object( arrays[ 0 ] );\n\ty = ndarray2object( arrays[ 1 ] );\n\n\t// Verify that the input and output arrays have the same number of dimensions...\n\tshx = x.shape;\n\tshy = y.shape;\n\tndims = shx.length;\n\tif ( ndims !== shy.length ) {\n\t\tthrow new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' );\n\t}\n\t// Determine whether we can avoid iteration altogether...\n\tif ( ndims === 0 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Verify that the input and output arrays have the same dimensions...\n\tlen = 1; // number of elements\n\tfor ( i = 0; i < ndims; i++ ) {\n\t\td = shx[ i ];\n\t\tif ( d !== shy[ i ] ) {\n\t\t\tthrow new Error( 'invalid arguments. Array must have the same shape.' );\n\t\t}\n\t\t// Note that, if one of the dimensions is `0`, the length will be `0`...\n\t\tlen *= d;\n\t}\n\t// Check whether we were provided empty ndarrays...\n\tif ( len === 0 ) {\n\t\treturn;\n\t}\n\t// Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays...\n\tif ( ndims === 1 ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn MAP[ ndims ]( x, y, fcn, thisArg );\n\t}\n\t// Determine iteration order:\n\tiox = iterationOrder( x.strides ); // +/-1\n\tioy = iterationOrder( y.strides ); // +/-1\n\n\t// Determine whether we can avoid blocked iteration...\n\tord = strides2order( x.strides );\n\tif ( iox !== 0 && ioy !== 0 && ord === strides2order( y.strides ) ) {\n\t\t// Determine whether we can use simple nested loops...\n\t\tif ( ndims <= MAX_DIMS ) {\n\t\t\t// So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration...\n\t\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\t\treturn ACCESSOR_MAP[ ndims ]( x, y, ord === 1, fcn, thisArg );\n\t\t\t}\n\t\t\treturn MAP[ ndims ]( x, y, ord === 1, fcn, thisArg );\n\t\t}\n\t\t// Fall-through to blocked iteration...\n\t}\n\t// Determine whether we can perform blocked iteration...\n\tif ( ndims <= MAX_DIMS ) {\n\t\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\t\treturn BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t\t}\n\t\treturn BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg );\n\t}\n\t// Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)...\n\tif ( x.accessorProtocol || y.accessorProtocol ) {\n\t\treturn accessormapnd( x, y, fcn, thisArg );\n\t}\n\tmapnd( x, y, fcn, thisArg );\n}\n\n\n// EXPORTS //\n\nexport default map;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ){\n* return z * 10.0;\n* }\n*\n* // Create a data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0 ] );\n* var ybuf = new Float64Array( 1 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offset:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like object:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* }\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0 ]\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref );\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 2 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 40.0, 60.0, 80.0 ]\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] );\n* var ybuf = new Complex64Array( 2 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [];\n*\n* // Define the array strides:\n* var sx = [ 0 ];\n* var sy = [ 0 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map0d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 30.0\n*\n* var im = imagf( v );\n* // returns 40.0\n*/\nfunction map0d( x, y, fcn, thisArg ) {\n\ty.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len\n}\n\n\n// EXPORTS //\n\nexport default map0d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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// MAIN //\n\n/**\n* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 4 ];\n*\n* // Define the array strides:\n* var sx = [ 1 ];\n* var sy = [ 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map1d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map1d( x, y, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dy0;\n\tvar S0;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables: dimensions and loop offset (pointer) increments...\n\tS0 = x.shape[ 0 ];\n\tdx0 = x.strides[ 0 ];\n\tdy0 = y.strides[ 0 ];\n\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) );\n\t\tix += dx0;\n\t\tiy += dy0;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map1d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map2d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map2d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 1 ];\n\t\tS1 = sh[ 0 ];\n\t\tdx0 = sx[ 1 ]; // offset increment for the outermost loop\n\t\tdx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 1 ];\n\t\tdy1 = sy[ 0 ] - ( S0*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for outermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sx[0] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointer to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\tix += dx0;\n\t\t\tiy += dy0;\n\t\t}\n\t\tix += dx1;\n\t\tiy += dy1;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 2, 1 ];\n* var sy = [ 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map3d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map3d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 2 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 0 ];\n\t\tdx0 = sx[ 2 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[2] );\n\t\tdx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 2 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[2] );\n\t\tdy2 = sy[ 0 ] - ( S1*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\tix += dx0;\n\t\t\t\tiy += dy0;\n\t\t\t}\n\t\t\tix += dx1;\n\t\t\tiy += dy1;\n\t\t}\n\t\tix += dx2;\n\t\tiy += dy2;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map4d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map4d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 3 ];\n\t\tS1 = sh[ 2 ];\n\t\tS2 = sh[ 1 ];\n\t\tS3 = sh[ 0 ];\n\t\tdx0 = sx[ 3 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 2 ] - ( S0*sx[3] );\n\t\tdx2 = sx[ 1 ] - ( S1*sx[2] );\n\t\tdx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 3 ];\n\t\tdy1 = sy[ 2 ] - ( S0*sy[3] );\n\t\tdy2 = sy[ 1 ] - ( S1*sy[2] );\n\t\tdy3 = sy[ 0 ] - ( S2*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t\tix += dx2;\n\t\t\tiy += dy2;\n\t\t}\n\t\tix += dx3;\n\t\tiy += dy3;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map5d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map5d( x, y, isRowMajor, fcn, thisArg ) {\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 4 ];\n\t\tS1 = sh[ 3 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 1 ];\n\t\tS4 = sh[ 0 ];\n\t\tdx0 = sx[ 4 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 3 ] - ( S0*sx[4] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[3] );\n\t\tdx3 = sx[ 1 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 4 ];\n\t\tdy1 = sy[ 3 ] - ( S0*sy[4] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[3] );\n\t\tdy3 = sy[ 1 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 0 ] - ( S3*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx1;\n\t\t\t\t\tiy += dy1;\n\t\t\t\t}\n\t\t\t\tix += dx2;\n\t\t\t\tiy += dy2;\n\t\t\t}\n\t\t\tix += dx3;\n\t\t\tiy += dy3;\n\t\t}\n\t\tix += dx4;\n\t\tiy += dy4;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map6d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map6d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 5 ];\n\t\tS1 = sh[ 4 ];\n\t\tS2 = sh[ 3 ];\n\t\tS3 = sh[ 2 ];\n\t\tS4 = sh[ 1 ];\n\t\tS5 = sh[ 0 ];\n\t\tdx0 = sx[ 5 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 4 ] - ( S0*sx[5] );\n\t\tdx2 = sx[ 3 ] - ( S1*sx[4] );\n\t\tdx3 = sx[ 2 ] - ( S2*sx[3] );\n\t\tdx4 = sx[ 1 ] - ( S3*sx[2] );\n\t\tdx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 5 ];\n\t\tdy1 = sy[ 4 ] - ( S0*sy[5] );\n\t\tdy2 = sy[ 3 ] - ( S1*sy[4] );\n\t\tdy3 = sy[ 2 ] - ( S2*sy[3] );\n\t\tdy4 = sy[ 1 ] - ( S3*sy[2] );\n\t\tdy5 = sy[ 0 ] - ( S4*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t\tix += dx3;\n\t\t\t\tiy += dy3;\n\t\t\t}\n\t\t\tix += dx4;\n\t\t\tiy += dy4;\n\t\t}\n\t\tix += dx5;\n\t\tiy += dy5;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map7d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 6 ];\n\t\tS1 = sh[ 5 ];\n\t\tS2 = sh[ 4 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 2 ];\n\t\tS5 = sh[ 1 ];\n\t\tS6 = sh[ 0 ];\n\t\tdx0 = sx[ 6 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 5 ] - ( S0*sx[6] );\n\t\tdx2 = sx[ 4 ] - ( S1*sx[5] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[4] );\n\t\tdx4 = sx[ 2 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 1 ] - ( S4*sx[2] );\n\t\tdx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 6 ];\n\t\tdy1 = sy[ 5 ] - ( S0*sy[6] );\n\t\tdy2 = sy[ 4 ] - ( S1*sy[5] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[4] );\n\t\tdy4 = sy[ 2 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 1 ] - ( S4*sy[2] );\n\t\tdy6 = sy[ 0 ] - ( S5*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx3;\n\t\t\t\t\tiy += dy3;\n\t\t\t\t}\n\t\t\t\tix += dx4;\n\t\t\t\tiy += dy4;\n\t\t\t}\n\t\t\tix += dx5;\n\t\t\tiy += dy5;\n\t\t}\n\t\tix += dx6;\n\t\tiy += dy6;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map8d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 7 ];\n\t\tS1 = sh[ 6 ];\n\t\tS2 = sh[ 5 ];\n\t\tS3 = sh[ 4 ];\n\t\tS4 = sh[ 3 ];\n\t\tS5 = sh[ 2 ];\n\t\tS6 = sh[ 1 ];\n\t\tS7 = sh[ 0 ];\n\t\tdx0 = sx[ 7 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 6 ] - ( S0*sx[7] );\n\t\tdx2 = sx[ 5 ] - ( S1*sx[6] );\n\t\tdx3 = sx[ 4 ] - ( S2*sx[5] );\n\t\tdx4 = sx[ 3 ] - ( S3*sx[4] );\n\t\tdx5 = sx[ 2 ] - ( S4*sx[3] );\n\t\tdx6 = sx[ 1 ] - ( S5*sx[2] );\n\t\tdx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 7 ];\n\t\tdy1 = sy[ 6 ] - ( S0*sy[7] );\n\t\tdy2 = sy[ 5 ] - ( S1*sy[6] );\n\t\tdy3 = sy[ 4 ] - ( S2*sy[5] );\n\t\tdy4 = sy[ 3 ] - ( S3*sy[4] );\n\t\tdy5 = sy[ 2 ] - ( S4*sy[3] );\n\t\tdy6 = sy[ 1 ] - ( S5*sy[2] );\n\t\tdy7 = sy[ 0 ] - ( S6*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx4;\n\t\t\t\t\tiy += dy4;\n\t\t\t\t}\n\t\t\t\tix += dx5;\n\t\t\t\tiy += dy5;\n\t\t\t}\n\t\t\tix += dx6;\n\t\t\tiy += dy6;\n\t\t}\n\t\tix += dx7;\n\t\tiy += dy7;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map9d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 8 ];\n\t\tS1 = sh[ 7 ];\n\t\tS2 = sh[ 6 ];\n\t\tS3 = sh[ 5 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 3 ];\n\t\tS6 = sh[ 2 ];\n\t\tS7 = sh[ 1 ];\n\t\tS8 = sh[ 0 ];\n\t\tdx0 = sx[ 8 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 7 ] - ( S0*sx[8] );\n\t\tdx2 = sx[ 6 ] - ( S1*sx[7] );\n\t\tdx3 = sx[ 5 ] - ( S2*sx[6] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[5] );\n\t\tdx5 = sx[ 3 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 2 ] - ( S5*sx[3] );\n\t\tdx7 = sx[ 1 ] - ( S6*sx[2] );\n\t\tdx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 8 ];\n\t\tdy1 = sy[ 7 ] - ( S0*sy[8] );\n\t\tdy2 = sy[ 6 ] - ( S1*sy[7] );\n\t\tdy3 = sy[ 5 ] - ( S2*sy[6] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[5] );\n\t\tdy5 = sy[ 3 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 2 ] - ( S5*sy[3] );\n\t\tdy7 = sy[ 1 ] - ( S6*sy[2] );\n\t\tdy8 = sy[ 0 ] - ( S7*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx5;\n\t\t\t\t\tiy += dy5;\n\t\t\t\t}\n\t\t\t\tix += dx6;\n\t\t\t\tiy += dy6;\n\t\t\t}\n\t\t\tix += dx7;\n\t\t\tiy += dy7;\n\t\t}\n\t\tix += dx8;\n\t\tiy += dy8;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport zeroTo from '@stdlib/array-base-zero-to';\nimport reverse from '@stdlib/array-base-reverse';\nimport take from '@stdlib/array-base-take-indexed';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* map10d( x, y, true, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\n\t// Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments...\n\tsh = x.shape;\n\tsx = x.strides;\n\tsy = y.strides;\n\tidx = zeroTo( sh.length );\n\tif ( isRowMajor ) {\n\t\t// For row-major ndarrays, the last dimensions have the fastest changing indices...\n\t\tS0 = sh[ 9 ];\n\t\tS1 = sh[ 8 ];\n\t\tS2 = sh[ 7 ];\n\t\tS3 = sh[ 6 ];\n\t\tS4 = sh[ 5 ];\n\t\tS5 = sh[ 4 ];\n\t\tS6 = sh[ 3 ];\n\t\tS7 = sh[ 2 ];\n\t\tS8 = sh[ 1 ];\n\t\tS9 = sh[ 0 ];\n\t\tdx0 = sx[ 9 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 8 ] - ( S0*sx[9] );\n\t\tdx2 = sx[ 7 ] - ( S1*sx[8] );\n\t\tdx3 = sx[ 6 ] - ( S2*sx[7] );\n\t\tdx4 = sx[ 5 ] - ( S3*sx[6] );\n\t\tdx5 = sx[ 4 ] - ( S4*sx[5] );\n\t\tdx6 = sx[ 3 ] - ( S5*sx[4] );\n\t\tdx7 = sx[ 2 ] - ( S6*sx[3] );\n\t\tdx8 = sx[ 1 ] - ( S7*sx[2] );\n\t\tdx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 9 ];\n\t\tdy1 = sy[ 8 ] - ( S0*sy[9] );\n\t\tdy2 = sy[ 7 ] - ( S1*sy[8] );\n\t\tdy3 = sy[ 6 ] - ( S2*sy[7] );\n\t\tdy4 = sy[ 5 ] - ( S3*sy[6] );\n\t\tdy5 = sy[ 4 ] - ( S4*sy[5] );\n\t\tdy6 = sy[ 3 ] - ( S5*sy[4] );\n\t\tdy7 = sy[ 2 ] - ( S6*sy[3] );\n\t\tdy8 = sy[ 1 ] - ( S7*sy[2] );\n\t\tdy9 = sy[ 0 ] - ( S8*sy[1] );\n\t} else { // order === 'column-major'\n\t\t// For column-major ndarrays, the first dimensions have the fastest changing indices...\n\t\tS0 = sh[ 0 ];\n\t\tS1 = sh[ 1 ];\n\t\tS2 = sh[ 2 ];\n\t\tS3 = sh[ 3 ];\n\t\tS4 = sh[ 4 ];\n\t\tS5 = sh[ 5 ];\n\t\tS6 = sh[ 6 ];\n\t\tS7 = sh[ 7 ];\n\t\tS8 = sh[ 8 ];\n\t\tS9 = sh[ 9 ];\n\t\tdx0 = sx[ 0 ]; // offset increment for innermost loop\n\t\tdx1 = sx[ 1 ] - ( S0*sx[0] );\n\t\tdx2 = sx[ 2 ] - ( S1*sx[1] );\n\t\tdx3 = sx[ 3 ] - ( S2*sx[2] );\n\t\tdx4 = sx[ 4 ] - ( S3*sx[3] );\n\t\tdx5 = sx[ 5 ] - ( S4*sx[4] );\n\t\tdx6 = sx[ 6 ] - ( S5*sx[5] );\n\t\tdx7 = sx[ 7 ] - ( S6*sx[6] );\n\t\tdx8 = sx[ 8 ] - ( S7*sx[7] );\n\t\tdx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop\n\t\tdy0 = sy[ 0 ];\n\t\tdy1 = sy[ 1 ] - ( S0*sy[0] );\n\t\tdy2 = sy[ 2 ] - ( S1*sy[1] );\n\t\tdy3 = sy[ 3 ] - ( S2*sy[2] );\n\t\tdy4 = sy[ 4 ] - ( S3*sy[3] );\n\t\tdy5 = sy[ 5 ] - ( S4*sy[4] );\n\t\tdy6 = sy[ 6 ] - ( S5*sy[5] );\n\t\tdy7 = sy[ 7 ] - ( S6*sy[6] );\n\t\tdy8 = sy[ 8 ] - ( S7*sy[7] );\n\t\tdy9 = sy[ 9 ] - ( S8*sy[8] );\n\t\tidx = reverse( idx );\n\t}\n\t// Set the pointers to the first indexed elements in the respective ndarrays...\n\tix = x.offset;\n\tiy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache accessors:\n\tget = x.accessors[ 0 ];\n\tset = y.accessors[ 1 ];\n\n\t// Iterate over the ndarray dimensions...\n\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx6;\n\t\t\t\t\tiy += dy6;\n\t\t\t\t}\n\t\t\t\tix += dx7;\n\t\t\t\tiy += dy7;\n\t\t\t}\n\t\t\tix += dx8;\n\t\t\tiy += dy8;\n\t\t}\n\t\tix += dx9;\n\t\tiy += dy9;\n\t}\n}\n\n\n// EXPORTS //\n\nexport default map10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Float64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0 ]\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( x ) {\n* return x * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 4, 4, 1 ];\n* var sy = [ 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Float64Array from '@stdlib/array-float64';\n*\n* function scale( z ) {\n* return z * 10.0;\n* }\n*\n* // Create data buffers:\n* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );\n* var ybuf = new Float64Array( 6 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ];\n* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 1;\n* var oy = 0;\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'float64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major'\n* };\n* var y = {\n* 'dtype': 'float64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major'\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* console.log( y.data );\n* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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 loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 1 ];\n* var sy = [ 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap2d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap2d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dy0;\n\tvar dy1;\n\tvar ox1;\n\tvar oy1;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar j0;\n\tvar j1;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache the references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\tif ( j1 < bsize ) {\n\t\t\ts1 = j1;\n\t\t\tj1 = 0;\n\t\t} else {\n\t\t\ts1 = bsize;\n\t\t\tj1 -= bsize;\n\t\t}\n\t\tox1 = ox + ( j1*sx[1] );\n\t\toy1 = oy + ( j1*sy[1] );\n\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\tif ( j0 < bsize ) {\n\t\t\t\ts0 = j0;\n\t\t\t\tj0 = 0;\n\t\t\t} else {\n\t\t\t\ts0 = bsize;\n\t\t\t\tj0 -= bsize;\n\t\t\t}\n\t\t\t// Compute the index offsets for the first input and output ndarray elements in the current block...\n\t\t\tix = ox1 + (j0*sx[0]);\n\t\t\tiy = oy1 + (j0*sy[0]);\n\n\t\t\t// Compute the loop offset increments...\n\t\t\tdx1 = sx[1] - (s0*sx[0]);\n\t\t\tdy1 = sy[1] - (s0*sy[0]);\n\n\t\t\t// Cache accessors:\n\t\t\tget = x.accessors[0];\n\t\t\tset = y.accessors[1];\n\n\t\t\t// Iterate over the ndarray dimensions...\n\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\tix += dx0;\n\t\t\t\t\tiy += dy0;\n\t\t\t\t}\n\t\t\t\tix += dx1;\n\t\t\t\tiy += dy1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap2d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 2, 2, 1 ];\n* var sy = [ 2, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap3d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap3d( x, y, fcn, thisArg ) {\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar ox1;\n\tvar ox2;\n\tvar oy1;\n\tvar oy2;\n\tvar idx;\n\tvar get;\n\tvar set;\n\tvar sh;\n\tvar s0;\n\tvar s1;\n\tvar s2;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\tif ( j2 < bsize ) {\n\t\t\ts2 = j2;\n\t\t\tj2 = 0;\n\t\t} else {\n\t\t\ts2 = bsize;\n\t\t\tj2 -= bsize;\n\t\t}\n\t\tox2 = ox + ( j2*sx[2] );\n\t\toy2 = oy + ( j2*sy[2] );\n\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\tif ( j1 < bsize ) {\n\t\t\t\ts1 = j1;\n\t\t\t\tj1 = 0;\n\t\t\t} else {\n\t\t\t\ts1 = bsize;\n\t\t\t\tj1 -= bsize;\n\t\t\t}\n\t\t\tdx2 = sx[2] - ( s1*sx[1] );\n\t\t\tdy2 = sy[2] - ( s1*sy[1] );\n\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\ts0 = j0;\n\t\t\t\t\tj0 = 0;\n\t\t\t\t} else {\n\t\t\t\t\ts0 = bsize;\n\t\t\t\t\tj0 -= bsize;\n\t\t\t\t}\n\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t// Compute loop offset increments...\n\t\t\t\tdx1 = sx[1] - ( s0*sx[0] );\n\t\t\t\tdy1 = sy[1] - ( s0*sy[0] );\n\n\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\tfor ( i2 = 0; i2 < s2; i2++ ) {\n\t\t\t\t\tfor ( i1 = 0; i1 < s1; i1++ ) {\n\t\t\t\t\t\tfor ( i0 = 0; i0 < s0; i0++ ) {\n\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t}\n\t\t\t\t\tix += dx2;\n\t\t\t\t\tiy += dy2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap3d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap4d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Iterate over blocks...\n\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\tif ( j3 < bsize ) {\n\t\t\tS3 = j3;\n\t\t\tj3 = 0;\n\t\t} else {\n\t\t\tS3 = bsize;\n\t\t\tj3 -= bsize;\n\t\t}\n\t\tox3 = ox + ( j3*sx[3] );\n\t\toy3 = oy + ( j3*sy[3] );\n\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\tif ( j2 < bsize ) {\n\t\t\t\tS2 = j2;\n\t\t\t\tj2 = 0;\n\t\t\t} else {\n\t\t\t\tS2 = bsize;\n\t\t\t\tj2 -= bsize;\n\t\t\t}\n\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\tS1 = j1;\n\t\t\t\t\tj1 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS1 = bsize;\n\t\t\t\t\tj1 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t// Cache accessors:\n\t\t\t\t\tget = x.accessors[ 0 ];\n\t\t\t\t\tset = y.accessors[ 1 ];\n\n\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap4d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap5d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar idx;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\tif ( j4 < bsize ) {\n\t\t\tS4 = j4;\n\t\t\tj4 = 0;\n\t\t} else {\n\t\t\tS4 = bsize;\n\t\t\tj4 -= bsize;\n\t\t}\n\t\tox4 = ox + ( j4*sx[4] );\n\t\toy4 = oy + ( j4*sy[4] );\n\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\tif ( j3 < bsize ) {\n\t\t\t\tS3 = j3;\n\t\t\t\tj3 = 0;\n\t\t\t} else {\n\t\t\t\tS3 = bsize;\n\t\t\t\tj3 -= bsize;\n\t\t\t}\n\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\tS2 = j2;\n\t\t\t\t\tj2 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS2 = bsize;\n\t\t\t\t\tj2 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len\n\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap5d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap6d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar set;\n\tvar get;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\tif ( j5 < bsize ) {\n\t\t\tS5 = j5;\n\t\t\tj5 = 0;\n\t\t} else {\n\t\t\tS5 = bsize;\n\t\t\tj5 -= bsize;\n\t\t}\n\t\tox5 = ox + ( j5*sx[5] );\n\t\toy5 = oy + ( j5*sy[5] );\n\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\tif ( j4 < bsize ) {\n\t\t\t\tS4 = j4;\n\t\t\t\tj4 = 0;\n\t\t\t} else {\n\t\t\t\tS4 = bsize;\n\t\t\t\tj4 -= bsize;\n\t\t\t}\n\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\tS3 = j3;\n\t\t\t\t\tj3 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS3 = bsize;\n\t\t\t\t\tj3 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap6d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap7d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\tif ( j6 < bsize ) {\n\t\t\tS6 = j6;\n\t\t\tj6 = 0;\n\t\t} else {\n\t\t\tS6 = bsize;\n\t\t\tj6 -= bsize;\n\t\t}\n\t\tox6 = ox + ( j6*sx[6] );\n\t\toy6 = oy + ( j6*sy[6] );\n\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\tif ( j5 < bsize ) {\n\t\t\t\tS5 = j5;\n\t\t\t\tj5 = 0;\n\t\t\t} else {\n\t\t\t\tS5 = bsize;\n\t\t\t\tj5 -= bsize;\n\t\t\t}\n\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\tS4 = j4;\n\t\t\t\t\tj4 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS4 = bsize;\n\t\t\t\t\tj4 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap7d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap8d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\tif ( j7 < bsize ) {\n\t\t\tS7 = j7;\n\t\t\tj7 = 0;\n\t\t} else {\n\t\t\tS7 = bsize;\n\t\t\tj7 -= bsize;\n\t\t}\n\t\tox7 = ox + ( j7*sx[7] );\n\t\toy7 = oy + ( j7*sy[7] );\n\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\tif ( j6 < bsize ) {\n\t\t\t\tS6 = j6;\n\t\t\t\tj6 = 0;\n\t\t\t} else {\n\t\t\t\tS6 = bsize;\n\t\t\t\tj6 -= bsize;\n\t\t\t}\n\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\tS5 = j5;\n\t\t\t\t\tj5 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS5 = bsize;\n\t\t\t\t\tj5 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap8d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap9d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\tif ( j8 < bsize ) {\n\t\t\tS8 = j8;\n\t\t\tj8 = 0;\n\t\t} else {\n\t\t\tS8 = bsize;\n\t\t\tj8 -= bsize;\n\t\t}\n\t\tox8 = ox + ( j8*sx[8] );\n\t\toy8 = oy + ( j8*sy[8] );\n\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\tif ( j7 < bsize ) {\n\t\t\t\tS7 = j7;\n\t\t\t\tj7 = 0;\n\t\t\t} else {\n\t\t\t\tS7 = bsize;\n\t\t\t\tj7 -= bsize;\n\t\t\t}\n\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\tS6 = j6;\n\t\t\t\t\tj6 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS6 = bsize;\n\t\t\t\t\tj6 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap9d;\n","/**\n* @license Apache-2.0\n*\n* Copyright (c) 2024 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/* eslint-disable max-depth, max-len */\n\n'use strict';\n\n// MODULES //\n\nimport loopOrder from '@stdlib/ndarray-base-unary-loop-interchange-order';\nimport blockSize from '@stdlib/ndarray-base-unary-tiling-block-size';\nimport take from '@stdlib/array-base-take-indexed';\nimport reverse from '@stdlib/array-base-reverse';\n\n\n// MAIN //\n\n/**\n* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking.\n*\n* @private\n* @param {Object} x - object containing ndarray meta data\n* @param {ndarrayLike} x.ref - reference to the original ndarray-like object\n* @param {string} x.dtype - data type\n* @param {Collection} x.data - data buffer\n* @param {NonNegativeIntegerArray} x.shape - dimensions\n* @param {IntegerArray} x.strides - stride lengths\n* @param {NonNegativeInteger} x.offset - index offset\n* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} x.accessors - data buffer accessors\n* @param {Object} y - object containing output ndarray meta data\n* @param {string} y.dtype - data type\n* @param {Collection} y.data - data buffer\n* @param {NonNegativeIntegerArray} y.shape - dimensions\n* @param {IntegerArray} y.strides - stride lengths\n* @param {NonNegativeInteger} y.offset - index offset\n* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style)\n* @param {Array} y.accessors - data buffer accessors\n* @param {Callback} fcn - callback function\n* @param {*} thisArg - callback execution context\n* @returns {void}\n*\n* @example\n* import Complex64Array from '@stdlib/array-complex64';\n* import Complex64 from '@stdlib/complex-float32-ctor';\n* import realf from '@stdlib/complex-float32-real';\n* import imagf from '@stdlib/complex-float32-imag';\n*\n* function scale( z ) {\n* return new Complex64( realf(z)*10.0, imagf(z)*10.0 );\n* }\n*\n* // Create data buffers:\n* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );\n* var ybuf = new Complex64Array( 4 );\n*\n* // Define the shape of the input and output arrays:\n* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ];\n*\n* // Define the array strides:\n* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ];\n*\n* // Define the index offsets:\n* var ox = 0;\n* var oy = 0;\n*\n* // Define getters and setters:\n* function getter( buf, idx ) {\n* return buf.get( idx );\n* }\n*\n* function setter( buf, idx, value ) {\n* buf.set( value, idx );\n* }\n*\n* // Create the input and output ndarray-like objects:\n* var x = {\n* 'ref': null,\n* 'dtype': 'complex64',\n* 'data': xbuf,\n* 'shape': shape,\n* 'strides': sx,\n* 'offset': ox,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n* var y = {\n* 'dtype': 'complex64',\n* 'data': ybuf,\n* 'shape': shape,\n* 'strides': sy,\n* 'offset': oy,\n* 'order': 'row-major',\n* 'accessors': [ getter, setter ]\n* };\n*\n* // Apply the map function:\n* blockedmap10d( x, y, scale, {} );\n*\n* var v = y.data.get( 0 );\n*\n* var re = realf( v );\n* // returns 10.0\n*\n* var im = imagf( v );\n* // returns 20.0\n*/\nfunction blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function\n\tvar bsize;\n\tvar xbuf;\n\tvar ybuf;\n\tvar get;\n\tvar set;\n\tvar dx0;\n\tvar dx1;\n\tvar dx2;\n\tvar dx3;\n\tvar dx4;\n\tvar dx5;\n\tvar dx6;\n\tvar dx7;\n\tvar dx8;\n\tvar dx9;\n\tvar dy0;\n\tvar dy1;\n\tvar dy2;\n\tvar dy3;\n\tvar dy4;\n\tvar dy5;\n\tvar dy6;\n\tvar dy7;\n\tvar dy8;\n\tvar dy9;\n\tvar ox1;\n\tvar ox2;\n\tvar ox3;\n\tvar ox4;\n\tvar ox5;\n\tvar ox6;\n\tvar ox7;\n\tvar ox8;\n\tvar ox9;\n\tvar oy1;\n\tvar oy2;\n\tvar oy3;\n\tvar oy4;\n\tvar oy5;\n\tvar oy6;\n\tvar oy7;\n\tvar oy8;\n\tvar oy9;\n\tvar idx;\n\tvar sh;\n\tvar S0;\n\tvar S1;\n\tvar S2;\n\tvar S3;\n\tvar S4;\n\tvar S5;\n\tvar S6;\n\tvar S7;\n\tvar S8;\n\tvar S9;\n\tvar sx;\n\tvar sy;\n\tvar ox;\n\tvar oy;\n\tvar ix;\n\tvar iy;\n\tvar i0;\n\tvar i1;\n\tvar i2;\n\tvar i3;\n\tvar i4;\n\tvar i5;\n\tvar i6;\n\tvar i7;\n\tvar i8;\n\tvar i9;\n\tvar j0;\n\tvar j1;\n\tvar j2;\n\tvar j3;\n\tvar j4;\n\tvar j5;\n\tvar j6;\n\tvar j7;\n\tvar j8;\n\tvar j9;\n\tvar o;\n\n\t// Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop...\n\n\t// Resolve the loop interchange order:\n\to = loopOrder( x.shape, x.strides, y.strides );\n\tsh = o.sh;\n\tsx = o.sx;\n\tsy = o.sy;\n\tidx = reverse( o.idx );\n\n\t// Determine the block size:\n\tbsize = blockSize( x.dtype, y.dtype );\n\n\t// Cache the indices of the first indexed elements in the respective ndarrays...\n\tox = x.offset;\n\toy = y.offset;\n\n\t// Cache references to the input and output ndarray buffers...\n\txbuf = x.data;\n\tybuf = y.data;\n\n\t// Cache offset increments for the innermost loop...\n\tdx0 = sx[0];\n\tdy0 = sy[0];\n\n\t// Cache accessors:\n\tget = x.accessors[0];\n\tset = y.accessors[1];\n\n\t// Iterate over blocks...\n\tfor ( j9 = sh[9]; j9 > 0; ) {\n\t\tif ( j9 < bsize ) {\n\t\t\tS9 = j9;\n\t\t\tj9 = 0;\n\t\t} else {\n\t\t\tS9 = bsize;\n\t\t\tj9 -= bsize;\n\t\t}\n\t\tox9 = ox + ( j9*sx[9] );\n\t\toy9 = oy + ( j9*sy[9] );\n\t\tfor ( j8 = sh[8]; j8 > 0; ) {\n\t\t\tif ( j8 < bsize ) {\n\t\t\t\tS8 = j8;\n\t\t\t\tj8 = 0;\n\t\t\t} else {\n\t\t\t\tS8 = bsize;\n\t\t\t\tj8 -= bsize;\n\t\t\t}\n\t\t\tdx9 = sx[9] - ( S8*sx[8] );\n\t\t\tdy9 = sy[9] - ( S8*sy[8] );\n\t\t\tox8 = ox9 + ( j8*sx[8] );\n\t\t\toy8 = oy9 + ( j8*sy[8] );\n\t\t\tfor ( j7 = sh[7]; j7 > 0; ) {\n\t\t\t\tif ( j7 < bsize ) {\n\t\t\t\t\tS7 = j7;\n\t\t\t\t\tj7 = 0;\n\t\t\t\t} else {\n\t\t\t\t\tS7 = bsize;\n\t\t\t\t\tj7 -= bsize;\n\t\t\t\t}\n\t\t\t\tdx8 = sx[8] - ( S7*sx[7] );\n\t\t\t\tdy8 = sy[8] - ( S7*sy[7] );\n\t\t\t\tox7 = ox8 + ( j7*sx[7] );\n\t\t\t\toy7 = oy8 + ( j7*sy[7] );\n\t\t\t\tfor ( j6 = sh[6]; j6 > 0; ) {\n\t\t\t\t\tif ( j6 < bsize ) {\n\t\t\t\t\t\tS6 = j6;\n\t\t\t\t\t\tj6 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tS6 = bsize;\n\t\t\t\t\t\tj6 -= bsize;\n\t\t\t\t\t}\n\t\t\t\t\tdx7 = sx[7] - ( S6*sx[6] );\n\t\t\t\t\tdy7 = sy[7] - ( S6*sy[6] );\n\t\t\t\t\tox6 = ox7 + ( j6*sx[6] );\n\t\t\t\t\toy6 = oy7 + ( j6*sy[6] );\n\t\t\t\t\tfor ( j5 = sh[5]; j5 > 0; ) {\n\t\t\t\t\t\tif ( j5 < bsize ) {\n\t\t\t\t\t\t\tS5 = j5;\n\t\t\t\t\t\t\tj5 = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tS5 = bsize;\n\t\t\t\t\t\t\tj5 -= bsize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdx6 = sx[6] - ( S5*sx[5] );\n\t\t\t\t\t\tdy6 = sy[6] - ( S5*sy[5] );\n\t\t\t\t\t\tox5 = ox6 + ( j5*sx[5] );\n\t\t\t\t\t\toy5 = oy6 + ( j5*sy[5] );\n\t\t\t\t\t\tfor ( j4 = sh[4]; j4 > 0; ) {\n\t\t\t\t\t\t\tif ( j4 < bsize ) {\n\t\t\t\t\t\t\t\tS4 = j4;\n\t\t\t\t\t\t\t\tj4 = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tS4 = bsize;\n\t\t\t\t\t\t\t\tj4 -= bsize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdx5 = sx[5] - ( S4*sx[4] );\n\t\t\t\t\t\t\tdy5 = sy[5] - ( S4*sy[4] );\n\t\t\t\t\t\t\tox4 = ox5 + ( j4*sx[4] );\n\t\t\t\t\t\t\toy4 = oy5 + ( j4*sy[4] );\n\t\t\t\t\t\t\tfor ( j3 = sh[3]; j3 > 0; ) {\n\t\t\t\t\t\t\t\tif ( j3 < bsize ) {\n\t\t\t\t\t\t\t\t\tS3 = j3;\n\t\t\t\t\t\t\t\t\tj3 = 0;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tS3 = bsize;\n\t\t\t\t\t\t\t\t\tj3 -= bsize;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdx4 = sx[4] - ( S3*sx[3] );\n\t\t\t\t\t\t\t\tdy4 = sy[4] - ( S3*sy[3] );\n\t\t\t\t\t\t\t\tox3 = ox4 + ( j3*sx[3] );\n\t\t\t\t\t\t\t\toy3 = oy4 + ( j3*sy[3] );\n\t\t\t\t\t\t\t\tfor ( j2 = sh[2]; j2 > 0; ) {\n\t\t\t\t\t\t\t\t\tif ( j2 < bsize ) {\n\t\t\t\t\t\t\t\t\t\tS2 = j2;\n\t\t\t\t\t\t\t\t\t\tj2 = 0;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tS2 = bsize;\n\t\t\t\t\t\t\t\t\t\tj2 -= bsize;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdx3 = sx[3] - ( S2*sx[2] );\n\t\t\t\t\t\t\t\t\tdy3 = sy[3] - ( S2*sy[2] );\n\t\t\t\t\t\t\t\t\tox2 = ox3 + ( j2*sx[2] );\n\t\t\t\t\t\t\t\t\toy2 = oy3 + ( j2*sy[2] );\n\t\t\t\t\t\t\t\t\tfor ( j1 = sh[1]; j1 > 0; ) {\n\t\t\t\t\t\t\t\t\t\tif ( j1 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\tS1 = j1;\n\t\t\t\t\t\t\t\t\t\t\tj1 = 0;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tS1 = bsize;\n\t\t\t\t\t\t\t\t\t\t\tj1 -= bsize;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdx2 = sx[2] - ( S1*sx[1] );\n\t\t\t\t\t\t\t\t\t\tdy2 = sy[2] - ( S1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tox1 = ox2 + ( j1*sx[1] );\n\t\t\t\t\t\t\t\t\t\toy1 = oy2 + ( j1*sy[1] );\n\t\t\t\t\t\t\t\t\t\tfor ( j0 = sh[0]; j0 > 0; ) {\n\t\t\t\t\t\t\t\t\t\t\tif ( j0 < bsize ) {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = j0;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 = 0;\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tS0 = bsize;\n\t\t\t\t\t\t\t\t\t\t\t\tj0 -= bsize;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t// Compute index offsets for the first input and output ndarray elements in the current block...\n\t\t\t\t\t\t\t\t\t\t\tix = ox1 + ( j0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tiy = oy1 + ( j0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Compute loop offset increments...\n\t\t\t\t\t\t\t\t\t\t\tdx1 = sx[1] - ( S0*sx[0] );\n\t\t\t\t\t\t\t\t\t\t\tdy1 = sy[1] - ( S0*sy[0] );\n\n\t\t\t\t\t\t\t\t\t\t\t// Iterate over the ndarray dimensions...\n\t\t\t\t\t\t\t\t\t\t\tfor ( i9 = 0; i9 < S9; i9++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor ( i8 = 0; i8 < S8; i8++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i7 = 0; i7 < S7; i7++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i6 = 0; i6 < S6; i6++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i5 = 0; i5 < S5; i5++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i4 = 0; i4 < S4; i4++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i3 = 0; i3 < S3; i3++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i2 = 0; i2 < S2; i2++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i1 = 0; i1 < S1; i1++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfor ( i0 = 0; i0 < S0; i0++ ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tset( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy7;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tix += dx8;\n\t\t\t\t\t\t\t\t\t\t\t\t\tiy += dy8;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tix += dx9;\n\t\t\t\t\t\t\t\t\t\t\t\tiy += dy9;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// EXPORTS //\n\nexport default blockedmap10d;\n"],"names":["MODE","MAP","x","y","fcn","thisArg","data","offset","call","ref","xbuf","ybuf","dx0","dy0","S0","ix","iy","i0","shape","strides","isRowMajor","dx1","dy1","idx","sh","S1","sx","sy","i1","zeroTo","length","reverse","take","dx2","dy2","S2","i2","dx3","dy3","S3","i3","dx4","dy4","S4","i4","dx5","dy5","S5","i5","dx6","dy6","S6","i6","dx7","dy7","S7","i7","dx8","dy8","S8","i8","dx9","dy9","S9","i9","ACCESSOR_MAP","accessors","get","set","BLOCKED_MAP","bsize","ox1","oy1","s0","s1","ox","oy","j0","j1","o","loopOrder","blockSize","dtype","ox2","oy2","s2","j2","ox3","oy3","j3","ox4","oy4","j4","ox5","oy5","j5","ox6","oy6","j6","ox7","oy7","j7","ox8","oy8","j8","ox9","oy9","j9","BLOCKED_ACCESSOR_MAP","MAX_DIMS","map","arrays","ndims","shx","shy","iox","ioy","len","ord","i","d","ndarray2object","Error","accessorProtocol","iterationOrder","strides2order","ordx","ordy","numel","order","vind2bind","ind2sub","accessormapnd","mapnd"],"mappings":"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AMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CACDvC,IAAM0C,EACNzC,IAAM0C,CACN,CAUX,ECjQA,SAAwBxD,EAAGC,EAAGC,EAAKC,GAClC,IAAIiE,EACA5D,EACAC,EACAC,EACAS,EACAY,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAhD,EACAS,EACAY,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAS,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAjC,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAnF,EACAC,EACAV,EACAW,EACAU,EACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACArC,GACAC,GACAgD,GACAC,GACA7D,GACAC,GACAC,GACAW,GACAQ,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAa,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACA5B,GA2BJ,IArBAvD,GADAuD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BK,GACPE,GAAKqD,GAAErD,GACPC,GAAKoD,GAAEpD,GACPJ,EAAMQ,EAASgD,GAAExD,KAGjB+C,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,GAAKzE,EAAEK,OACPqE,GAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMc,GAAG,GACTb,EAAMc,GAAG,GAGHgF,GAAKnF,EAAG,GAAImF,GAAK,GAUtB,IATKA,GAAKrC,GACTP,GAAK4C,GACLA,GAAK,IAEL5C,GAAKO,EACLqC,IAAMrC,GAEPmC,EAAM9B,GAAOgC,GAAGjF,GAAG,GACnBgF,EAAM9B,GAAO+B,GAAGhF,GAAG,GACb6E,GAAKhF,EAAG,GAAIgF,GAAK,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sB,EACNrB,IAAMsB,CACN,CACDvB,IAAM0B,EACNzB,IAAM0B,CACN,CACD3B,IAAM8B,EACN7B,IAAM8B,CACN,CACD/B,IAAMkC,EACNjC,IAAMkC,CACN,CACDnC,IAAMsC,EACNrC,IAAMsC,CACN,CACDvC,IAAM0C,EACNzC,IAAM0C,CACN,CAUX,ECvQA,SAAwBxD,EAAGC,EAAGC,EAAKC,GAClC,IAAIiE,EACA5D,EACAC,EACAwD,EACAC,EACAxD,EACAS,EACAY,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAhD,EACAS,EACAY,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAI,EACAS,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAjC,EACAY,EACAI,EACAG,EACAG,EACAG,EACAG,EACAG,EACAG,EACAnF,EACAC,EACAV,EACAW,GACAU,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACArC,GACAC,GACAgD,GACAC,GACA7D,GACAC,GACAC,GACAW,GACAQ,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAI,GACAa,GACAC,GACAQ,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACAG,GACA5B,GA+BJ,IAzBAvD,GADAuD,GAAIC,EAAW9E,EAAEgB,MAAOhB,EAAEiB,QAAShB,EAAEgB,UAC9BK,GACPE,GAAKqD,GAAErD,GACPC,GAAKoD,GAAEpD,GACPJ,EAAMQ,EAASgD,GAAExD,KAGjB+C,EAAQW,EAAW/E,EAAEgF,MAAO/E,EAAE+E,OAG9BP,GAAKzE,EAAEK,OACPqE,GAAKzE,EAAEI,OAGPG,EAAOR,EAAEI,KACTK,EAAOR,EAAEG,KAGTM,EAAMc,GAAG,GACTb,EAAMc,GAAG,GAGTwC,EAAMjE,EAAEgE,UAAU,GAClBE,EAAMjE,EAAE+D,UAAU,GAGZyC,GAAKnF,EAAG,GAAImF,GAAK,GAUtB,IATKA,GAAKrC,GACTP,GAAK4C,GACLA,GAAK,IAEL5C,GAAKO,EACLqC,IAAMrC,GAEPmC,EAAM9B,GAAOgC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"} \ No newline at end of file diff --git a/lib/0d.js b/lib/0d.js deleted file mode 100644 index f19e08f..0000000 --- a/lib/0d.js +++ /dev/null @@ -1,100 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ){ -* return z * 10.0; -* } -* -* // Create a data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0 ] ); -* var ybuf = new Float64Array( 1 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offset: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like object: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* } -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0 ] -*/ -function map0d( x, y, fcn, thisArg ) { - y.data[ y.offset ] = fcn.call( thisArg, x.data[ x.offset ], [], x.ref ); -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/0d_accessors.js b/lib/0d_accessors.js deleted file mode 100644 index 0ce37b7..0000000 --- a/lib/0d_accessors.js +++ /dev/null @@ -1,121 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a zero-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* var ybuf = new Complex64Array( 2 ); -* -* // Define the shape of the input and output arrays: -* var shape = []; -* -* // Define the array strides: -* var sx = [ 0 ]; -* var sy = [ 0 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map0d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 30.0 -* -* var im = imagf( v ); -* // returns 40.0 -*/ -function map0d( x, y, fcn, thisArg ) { - y.accessors[ 1 ]( y.data, y.offset, fcn.call( thisArg, x.accessors[ 0 ]( x.data, x.offset ), [], x.ref ) ); // eslint-disable-line max-len -} - - -// EXPORTS // - -module.exports = map0d; diff --git a/lib/10d.js b/lib/10d.js deleted file mode 100644 index 40921fb..0000000 --- a/lib/10d.js +++ /dev/null @@ -1,281 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map10d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_accessors.js b/lib/10d_accessors.js deleted file mode 100644 index 9719f80..0000000 --- a/lib/10d_accessors.js +++ /dev/null @@ -1,308 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map10d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map10d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 9 ]; - S1 = sh[ 8 ]; - S2 = sh[ 7 ]; - S3 = sh[ 6 ]; - S4 = sh[ 5 ]; - S5 = sh[ 4 ]; - S6 = sh[ 3 ]; - S7 = sh[ 2 ]; - S8 = sh[ 1 ]; - S9 = sh[ 0 ]; - dx0 = sx[ 9 ]; // offset increment for innermost loop - dx1 = sx[ 8 ] - ( S0*sx[9] ); - dx2 = sx[ 7 ] - ( S1*sx[8] ); - dx3 = sx[ 6 ] - ( S2*sx[7] ); - dx4 = sx[ 5 ] - ( S3*sx[6] ); - dx5 = sx[ 4 ] - ( S4*sx[5] ); - dx6 = sx[ 3 ] - ( S5*sx[4] ); - dx7 = sx[ 2 ] - ( S6*sx[3] ); - dx8 = sx[ 1 ] - ( S7*sx[2] ); - dx9 = sx[ 0 ] - ( S8*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 9 ]; - dy1 = sy[ 8 ] - ( S0*sy[9] ); - dy2 = sy[ 7 ] - ( S1*sy[8] ); - dy3 = sy[ 6 ] - ( S2*sy[7] ); - dy4 = sy[ 5 ] - ( S3*sy[6] ); - dy5 = sy[ 4 ] - ( S4*sy[5] ); - dy6 = sy[ 3 ] - ( S5*sy[4] ); - dy7 = sy[ 2 ] - ( S6*sy[3] ); - dy8 = sy[ 1 ] - ( S7*sy[2] ); - dy9 = sy[ 0 ] - ( S8*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - S9 = sh[ 9 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); - dx9 = sx[ 9 ] - ( S8*sx[8] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - dy9 = sy[ 9 ] - ( S8*sy[8] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i9, i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } -} - - -// EXPORTS // - -module.exports = map10d; diff --git a/lib/10d_blocked.js b/lib/10d_blocked.js deleted file mode 100644 index 61f8ad6..0000000 --- a/lib/10d_blocked.js +++ /dev/null @@ -1,389 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/10d_blocked_accessors.js b/lib/10d_blocked_accessors.js deleted file mode 100644 index b11b42d..0000000 --- a/lib/10d_blocked_accessors.js +++ /dev/null @@ -1,416 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a ten-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap10d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap10d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dx9; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var dy9; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var ox9; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var oy9; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var S9; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var i9; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var j9; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j9 = sh[9]; j9 > 0; ) { - if ( j9 < bsize ) { - S9 = j9; - j9 = 0; - } else { - S9 = bsize; - j9 -= bsize; - } - ox9 = ox + ( j9*sx[9] ); - oy9 = oy + ( j9*sy[9] ); - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - dx9 = sx[9] - ( S8*sx[8] ); - dy9 = sy[9] - ( S8*sy[8] ); - ox8 = ox9 + ( j8*sx[8] ); - oy8 = oy9 + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i9 = 0; i9 < S9; i9++ ) { - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j9+i9, j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - ix += dx9; - iy += dy9; - } - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap10d; diff --git a/lib/1d.js b/lib/1d.js deleted file mode 100644 index b5f0220..0000000 --- a/lib/1d.js +++ /dev/null @@ -1,129 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 2 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 40.0, 60.0, 80.0 ] -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], [ i0 ], x.ref ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/1d_accessors.js b/lib/1d_accessors.js deleted file mode 100644 index e977a57..0000000 --- a/lib/1d_accessors.js +++ /dev/null @@ -1,156 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -/** -* Applies a callback function to elements in a one-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 4 ]; -* -* // Define the array strides: -* var sx = [ 1 ]; -* var sy = [ 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map1d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map1d( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dy0; - var S0; - var ix; - var iy; - var i0; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables: dimensions and loop offset (pointer) increments... - S0 = x.shape[ 0 ]; - dx0 = x.strides[ 0 ]; - dy0 = y.strides[ 0 ]; - - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), [ i0 ], x.ref ) ); - ix += dx0; - iy += dy0; - } -} - - -// EXPORTS // - -module.exports = map1d; diff --git a/lib/2d.js b/lib/2d.js deleted file mode 100644 index f648532..0000000 --- a/lib/2d.js +++ /dev/null @@ -1,167 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map2d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function map2d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_accessors.js b/lib/2d_accessors.js deleted file mode 100644 index 8468f7a..0000000 --- a/lib/2d_accessors.js +++ /dev/null @@ -1,194 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map2d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map2d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dy0; - var dy1; - var idx; - var sh; - var S0; - var S1; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 1 ]; - S1 = sh[ 0 ]; - dx0 = sx[ 1 ]; // offset increment for the outermost loop - dx1 = sx[ 0 ] - ( S0*sx[1] ); // offset increment for innermost loop - dy0 = sy[ 1 ]; - dy1 = sy[ 0 ] - ( S0*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - dx0 = sx[ 0 ]; // offset increment for outermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); // offset increment for innermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sx[0] ); - idx = reverse( idx ); - } - // Set the pointer to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } -} - - -// EXPORTS // - -module.exports = map2d; diff --git a/lib/2d_blocked.js b/lib/2d_blocked.js deleted file mode 100644 index 58716e3..0000000 --- a/lib/2d_blocked.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/2d_blocked_accessors.js b/lib/2d_blocked_accessors.js deleted file mode 100644 index b0640fc..0000000 --- a/lib/2d_blocked_accessors.js +++ /dev/null @@ -1,222 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a two-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap2d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap2d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dy0; - var dy1; - var ox1; - var oy1; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var j0; - var j1; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache the references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - ox1 = ox + ( j1*sx[1] ); - oy1 = oy + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute the index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + (j0*sx[0]); - iy = oy1 + (j0*sy[0]); - - // Compute the loop offset increments... - dx1 = sx[1] - (s0*sx[0]); - dy1 = sy[1] - (s0*sy[0]); - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over the ndarray dimensions... - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap2d; diff --git a/lib/3d.js b/lib/3d.js deleted file mode 100644 index 64d2b03..0000000 --- a/lib/3d.js +++ /dev/null @@ -1,181 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map3d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map3d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_accessors.js b/lib/3d_accessors.js deleted file mode 100644 index 5b2c781..0000000 --- a/lib/3d_accessors.js +++ /dev/null @@ -1,208 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 2, 1 ]; -* var sy = [ 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map3d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map3d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var idx; - var get; - var set; - var sh; - var S0; - var S1; - var S2; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 2 ]; - S1 = sh[ 1 ]; - S2 = sh[ 0 ]; - dx0 = sx[ 2 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[2] ); - dx2 = sx[ 0 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 2 ]; - dy1 = sy[ 1 ] - ( S0*sy[2] ); - dy2 = sy[ 0 ] - ( S1*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } -} - - -// EXPORTS // - -module.exports = map3d; diff --git a/lib/3d_blocked.js b/lib/3d_blocked.js deleted file mode 100644 index b88365a..0000000 --- a/lib/3d_blocked.js +++ /dev/null @@ -1,221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/3d_blocked_accessors.js b/lib/3d_blocked_accessors.js deleted file mode 100644 index f27a875..0000000 --- a/lib/3d_blocked_accessors.js +++ /dev/null @@ -1,248 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a three-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 2, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap3d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap3d( x, y, fcn, thisArg ) { - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dy0; - var dy1; - var dy2; - var ox1; - var ox2; - var oy1; - var oy2; - var idx; - var get; - var set; - var sh; - var s0; - var s1; - var s2; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var j0; - var j1; - var j2; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - s2 = j2; - j2 = 0; - } else { - s2 = bsize; - j2 -= bsize; - } - ox2 = ox + ( j2*sx[2] ); - oy2 = oy + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - s1 = j1; - j1 = 0; - } else { - s1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( s1*sx[1] ); - dy2 = sy[2] - ( s1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - s0 = j0; - j0 = 0; - } else { - s0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( s0*sx[0] ); - dy1 = sy[1] - ( s0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i2 = 0; i2 < s2; i2++ ) { - for ( i1 = 0; i1 < s1; i1++ ) { - for ( i0 = 0; i0 < s0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap3d; diff --git a/lib/4d.js b/lib/4d.js deleted file mode 100644 index e890063..0000000 --- a/lib/4d.js +++ /dev/null @@ -1,195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map4d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map4d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_accessors.js b/lib/4d_accessors.js deleted file mode 100644 index 6a9229d..0000000 --- a/lib/4d_accessors.js +++ /dev/null @@ -1,222 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map4d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map4d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 3 ]; - S1 = sh[ 2 ]; - S2 = sh[ 1 ]; - S3 = sh[ 0 ]; - dx0 = sx[ 3 ]; // offset increment for innermost loop - dx1 = sx[ 2 ] - ( S0*sx[3] ); - dx2 = sx[ 1 ] - ( S1*sx[2] ); - dx3 = sx[ 0 ] - ( S2*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 3 ]; - dy1 = sy[ 2 ] - ( S0*sy[3] ); - dy2 = sy[ 1 ] - ( S1*sy[2] ); - dy3 = sy[ 0 ] - ( S2*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } -} - - -// EXPORTS // - -module.exports = map4d; diff --git a/lib/4d_blocked.js b/lib/4d_blocked.js deleted file mode 100644 index 7a2e98b..0000000 --- a/lib/4d_blocked.js +++ /dev/null @@ -1,245 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 4, 4, 1 ]; -* var sy = [ 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/4d_blocked_accessors.js b/lib/4d_blocked_accessors.js deleted file mode 100644 index 3ffdf38..0000000 --- a/lib/4d_blocked_accessors.js +++ /dev/null @@ -1,272 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a four-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap4d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap4d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dy0; - var dy1; - var dy2; - var dy3; - var ox1; - var ox2; - var ox3; - var idx; - var oy1; - var oy2; - var oy3; - var sh; - var S0; - var S1; - var S2; - var S3; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var j0; - var j1; - var j2; - var j3; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - ox3 = ox + ( j3*sx[3] ); - oy3 = oy + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap4d; diff --git a/lib/5d.js b/lib/5d.js deleted file mode 100644 index 48262e6..0000000 --- a/lib/5d.js +++ /dev/null @@ -1,209 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map5d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map5d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_accessors.js b/lib/5d_accessors.js deleted file mode 100644 index f678ec9..0000000 --- a/lib/5d_accessors.js +++ /dev/null @@ -1,236 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map5d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map5d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 4 ]; - S1 = sh[ 3 ]; - S2 = sh[ 2 ]; - S3 = sh[ 1 ]; - S4 = sh[ 0 ]; - dx0 = sx[ 4 ]; // offset increment for innermost loop - dx1 = sx[ 3 ] - ( S0*sx[4] ); - dx2 = sx[ 2 ] - ( S1*sx[3] ); - dx3 = sx[ 1 ] - ( S2*sx[2] ); - dx4 = sx[ 0 ] - ( S3*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 4 ]; - dy1 = sy[ 3 ] - ( S0*sy[4] ); - dy2 = sy[ 2 ] - ( S1*sy[3] ); - dy3 = sy[ 1 ] - ( S2*sy[2] ); - dy4 = sy[ 0 ] - ( S3*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } -} - - -// EXPORTS // - -module.exports = map5d; diff --git a/lib/5d_blocked.js b/lib/5d_blocked.js deleted file mode 100644 index feccd93..0000000 --- a/lib/5d_blocked.js +++ /dev/null @@ -1,269 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/5d_blocked_accessors.js b/lib/5d_blocked_accessors.js deleted file mode 100644 index e7c8d04..0000000 --- a/lib/5d_blocked_accessors.js +++ /dev/null @@ -1,296 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a five-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap5d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap5d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var ox1; - var ox2; - var ox3; - var ox4; - var idx; - var oy1; - var oy2; - var oy3; - var oy4; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var j0; - var j1; - var j2; - var j3; - var j4; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - ox4 = ox + ( j4*sx[4] ); - oy4 = oy + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap5d; diff --git a/lib/6d.js b/lib/6d.js deleted file mode 100644 index 118b2f8..0000000 --- a/lib/6d.js +++ /dev/null @@ -1,225 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map6d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map6d( x, y, isRowMajor, fcn, thisArg ) { - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_accessors.js b/lib/6d_accessors.js deleted file mode 100644 index edf42be..0000000 --- a/lib/6d_accessors.js +++ /dev/null @@ -1,252 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map6d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map6d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 5 ]; - S1 = sh[ 4 ]; - S2 = sh[ 3 ]; - S3 = sh[ 2 ]; - S4 = sh[ 1 ]; - S5 = sh[ 0 ]; - dx0 = sx[ 5 ]; // offset increment for innermost loop - dx1 = sx[ 4 ] - ( S0*sx[5] ); - dx2 = sx[ 3 ] - ( S1*sx[4] ); - dx3 = sx[ 2 ] - ( S2*sx[3] ); - dx4 = sx[ 1 ] - ( S3*sx[2] ); - dx5 = sx[ 0 ] - ( S4*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 5 ]; - dy1 = sy[ 4 ] - ( S0*sy[5] ); - dy2 = sy[ 3 ] - ( S1*sy[4] ); - dy3 = sy[ 2 ] - ( S2*sy[3] ); - dy4 = sy[ 1 ] - ( S3*sy[2] ); - dy5 = sy[ 0 ] - ( S4*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } -} - - -// EXPORTS // - -module.exports = map6d; diff --git a/lib/6d_blocked.js b/lib/6d_blocked.js deleted file mode 100644 index 2bfdfbb..0000000 --- a/lib/6d_blocked.js +++ /dev/null @@ -1,293 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/6d_blocked_accessors.js b/lib/6d_blocked_accessors.js deleted file mode 100644 index 4487255..0000000 --- a/lib/6d_blocked_accessors.js +++ /dev/null @@ -1,320 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a six-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap6d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap6d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var set; - var get; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - ox5 = ox + ( j5*sx[5] ); - oy5 = oy + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap6d; diff --git a/lib/7d.js b/lib/7d.js deleted file mode 100644 index 9b68de0..0000000 --- a/lib/7d.js +++ /dev/null @@ -1,239 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map7d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_accessors.js b/lib/7d_accessors.js deleted file mode 100644 index 709514b..0000000 --- a/lib/7d_accessors.js +++ /dev/null @@ -1,266 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map7d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map7d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 6 ]; - S1 = sh[ 5 ]; - S2 = sh[ 4 ]; - S3 = sh[ 3 ]; - S4 = sh[ 2 ]; - S5 = sh[ 1 ]; - S6 = sh[ 0 ]; - dx0 = sx[ 6 ]; // offset increment for innermost loop - dx1 = sx[ 5 ] - ( S0*sx[6] ); - dx2 = sx[ 4 ] - ( S1*sx[5] ); - dx3 = sx[ 3 ] - ( S2*sx[4] ); - dx4 = sx[ 2 ] - ( S3*sx[3] ); - dx5 = sx[ 1 ] - ( S4*sx[2] ); - dx6 = sx[ 0 ] - ( S5*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 6 ]; - dy1 = sy[ 5 ] - ( S0*sy[6] ); - dy2 = sy[ 4 ] - ( S1*sy[5] ); - dy3 = sy[ 3 ] - ( S2*sy[4] ); - dy4 = sy[ 2 ] - ( S3*sy[3] ); - dy5 = sy[ 1 ] - ( S4*sy[2] ); - dy6 = sy[ 0 ] - ( S5*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } -} - - -// EXPORTS // - -module.exports = map7d; diff --git a/lib/7d_blocked.js b/lib/7d_blocked.js deleted file mode 100644 index 73764f4..0000000 --- a/lib/7d_blocked.js +++ /dev/null @@ -1,317 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/7d_blocked_accessors.js b/lib/7d_blocked_accessors.js deleted file mode 100644 index 6726392..0000000 --- a/lib/7d_blocked_accessors.js +++ /dev/null @@ -1,344 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a seven-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap7d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap7d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - ox6 = ox + ( j6*sx[6] ); - oy6 = oy + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap7d; diff --git a/lib/8d.js b/lib/8d.js deleted file mode 100644 index d5f2e9c..0000000 --- a/lib/8d.js +++ /dev/null @@ -1,253 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map8d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_accessors.js b/lib/8d_accessors.js deleted file mode 100644 index ff223bb..0000000 --- a/lib/8d_accessors.js +++ /dev/null @@ -1,280 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map8d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map8d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 7 ]; - S1 = sh[ 6 ]; - S2 = sh[ 5 ]; - S3 = sh[ 4 ]; - S4 = sh[ 3 ]; - S5 = sh[ 2 ]; - S6 = sh[ 1 ]; - S7 = sh[ 0 ]; - dx0 = sx[ 7 ]; // offset increment for innermost loop - dx1 = sx[ 6 ] - ( S0*sx[7] ); - dx2 = sx[ 5 ] - ( S1*sx[6] ); - dx3 = sx[ 4 ] - ( S2*sx[5] ); - dx4 = sx[ 3 ] - ( S3*sx[4] ); - dx5 = sx[ 2 ] - ( S4*sx[3] ); - dx6 = sx[ 1 ] - ( S5*sx[2] ); - dx7 = sx[ 0 ] - ( S6*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 7 ]; - dy1 = sy[ 6 ] - ( S0*sy[7] ); - dy2 = sy[ 5 ] - ( S1*sy[6] ); - dy3 = sy[ 4 ] - ( S2*sy[5] ); - dy4 = sy[ 3 ] - ( S3*sy[4] ); - dy5 = sy[ 2 ] - ( S4*sy[3] ); - dy6 = sy[ 1 ] - ( S5*sy[2] ); - dy7 = sy[ 0 ] - ( S6*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } -} - - -// EXPORTS // - -module.exports = map8d; diff --git a/lib/8d_blocked.js b/lib/8d_blocked.js deleted file mode 100644 index ed8b2a4..0000000 --- a/lib/8d_blocked.js +++ /dev/null @@ -1,341 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/8d_blocked_accessors.js b/lib/8d_blocked_accessors.js deleted file mode 100644 index 64da579..0000000 --- a/lib/8d_blocked_accessors.js +++ /dev/null @@ -1,368 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in an eight-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap8d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap8d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - ox7 = ox + ( j7*sx[7] ); - oy7 = oy + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap8d; diff --git a/lib/9d.js b/lib/9d.js deleted file mode 100644 index 64118ca..0000000 --- a/lib/9d.js +++ /dev/null @@ -1,267 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map9d( x, y, true, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_accessors.js b/lib/9d_accessors.js deleted file mode 100644 index 1d5db89..0000000 --- a/lib/9d_accessors.js +++ /dev/null @@ -1,294 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth */ - -'use strict'; - -// MODULES // - -var zeroTo = require( '@stdlib/array-base-zero-to' ); -var reverse = require( '@stdlib/array-base-reverse' ); -var take = require( '@stdlib/array-base-take-indexed' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {boolean} isRowMajor - boolean indicating if provided arrays are in row-major order -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* map9d( x, y, true, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function map9d( x, y, isRowMajor, fcn, thisArg ) { // eslint-disable-line max-statements - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - - // Note on variable naming convention: S#, dx#, dy#, i# where # corresponds to the loop number, with `0` being the innermost loop... - - // Extract loop variables for purposes of loop interchange: dimensions and loop offset (pointer) increments... - sh = x.shape; - sx = x.strides; - sy = y.strides; - idx = zeroTo( sh.length ); - if ( isRowMajor ) { - // For row-major ndarrays, the last dimensions have the fastest changing indices... - S0 = sh[ 8 ]; - S1 = sh[ 7 ]; - S2 = sh[ 6 ]; - S3 = sh[ 5 ]; - S4 = sh[ 4 ]; - S5 = sh[ 3 ]; - S6 = sh[ 2 ]; - S7 = sh[ 1 ]; - S8 = sh[ 0 ]; - dx0 = sx[ 8 ]; // offset increment for innermost loop - dx1 = sx[ 7 ] - ( S0*sx[8] ); - dx2 = sx[ 6 ] - ( S1*sx[7] ); - dx3 = sx[ 5 ] - ( S2*sx[6] ); - dx4 = sx[ 4 ] - ( S3*sx[5] ); - dx5 = sx[ 3 ] - ( S4*sx[4] ); - dx6 = sx[ 2 ] - ( S5*sx[3] ); - dx7 = sx[ 1 ] - ( S6*sx[2] ); - dx8 = sx[ 0 ] - ( S7*sx[1] ); // offset increment for outermost loop - dy0 = sy[ 8 ]; - dy1 = sy[ 7 ] - ( S0*sy[8] ); - dy2 = sy[ 6 ] - ( S1*sy[7] ); - dy3 = sy[ 5 ] - ( S2*sy[6] ); - dy4 = sy[ 4 ] - ( S3*sy[5] ); - dy5 = sy[ 3 ] - ( S4*sy[4] ); - dy6 = sy[ 2 ] - ( S5*sy[3] ); - dy7 = sy[ 1 ] - ( S6*sy[2] ); - dy8 = sy[ 0 ] - ( S7*sy[1] ); - } else { // order === 'column-major' - // For column-major ndarrays, the first dimensions have the fastest changing indices... - S0 = sh[ 0 ]; - S1 = sh[ 1 ]; - S2 = sh[ 2 ]; - S3 = sh[ 3 ]; - S4 = sh[ 4 ]; - S5 = sh[ 5 ]; - S6 = sh[ 6 ]; - S7 = sh[ 7 ]; - S8 = sh[ 8 ]; - dx0 = sx[ 0 ]; // offset increment for innermost loop - dx1 = sx[ 1 ] - ( S0*sx[0] ); - dx2 = sx[ 2 ] - ( S1*sx[1] ); - dx3 = sx[ 3 ] - ( S2*sx[2] ); - dx4 = sx[ 4 ] - ( S3*sx[3] ); - dx5 = sx[ 5 ] - ( S4*sx[4] ); - dx6 = sx[ 6 ] - ( S5*sx[5] ); - dx7 = sx[ 7 ] - ( S6*sx[6] ); - dx8 = sx[ 8 ] - ( S7*sx[7] ); // offset increment for outermost loop - dy0 = sy[ 0 ]; - dy1 = sy[ 1 ] - ( S0*sy[0] ); - dy2 = sy[ 2 ] - ( S1*sy[1] ); - dy3 = sy[ 3 ] - ( S2*sy[2] ); - dy4 = sy[ 4 ] - ( S3*sy[3] ); - dy5 = sy[ 5 ] - ( S4*sy[4] ); - dy6 = sy[ 6 ] - ( S5*sy[5] ); - dy7 = sy[ 7 ] - ( S6*sy[6] ); - dy8 = sy[ 8 ] - ( S7*sy[7] ); - idx = reverse( idx ); - } - // Set the pointers to the first indexed elements in the respective ndarrays... - ix = x.offset; - iy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ i8, i7, i6, i5, i4, i3, i2, i1, i0 ], idx ), x.ref ) ); // eslint-disable-line max-len - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } -} - - -// EXPORTS // - -module.exports = map9d; diff --git a/lib/9d_blocked.js b/lib/9d_blocked.js deleted file mode 100644 index 14d237a..0000000 --- a/lib/9d_blocked.js +++ /dev/null @@ -1,365 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 12, 12, 12, 12, 12, 12, 4, 4, 1 ]; -* var sy = [ 6, 6, 6, 6, 6, 6, 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/9d_blocked_accessors.js b/lib/9d_blocked_accessors.js deleted file mode 100644 index cebb0ce..0000000 --- a/lib/9d_blocked_accessors.js +++ /dev/null @@ -1,392 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-depth, max-len */ - -'use strict'; - -// MODULES // - -var loopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var take = require( '@stdlib/array-base-take-indexed' ); -var reverse = require( '@stdlib/array-base-reverse' ); - - -// MAIN // - -/** -* Applies a callback function to elements in a nine-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray via loop blocking. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 1, 1, 1, 1, 1, 1, 1, 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* var sy = [ 4, 4, 4, 4, 4, 4, 4, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* blockedmap9d( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function blockedmap9d( x, y, fcn, thisArg ) { // eslint-disable-line max-statements, max-lines-per-function - var bsize; - var xbuf; - var ybuf; - var get; - var set; - var dx0; - var dx1; - var dx2; - var dx3; - var dx4; - var dx5; - var dx6; - var dx7; - var dx8; - var dy0; - var dy1; - var dy2; - var dy3; - var dy4; - var dy5; - var dy6; - var dy7; - var dy8; - var ox1; - var ox2; - var ox3; - var ox4; - var ox5; - var ox6; - var ox7; - var ox8; - var oy1; - var oy2; - var oy3; - var oy4; - var oy5; - var oy6; - var oy7; - var oy8; - var idx; - var sh; - var S0; - var S1; - var S2; - var S3; - var S4; - var S5; - var S6; - var S7; - var S8; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i0; - var i1; - var i2; - var i3; - var i4; - var i5; - var i6; - var i7; - var i8; - var j0; - var j1; - var j2; - var j3; - var j4; - var j5; - var j6; - var j7; - var j8; - var o; - - // Note on variable naming convention: s#, dx#, dy#, i#, j# where # corresponds to the loop number, with `0` being the innermost loop... - - // Resolve the loop interchange order: - o = loopOrder( x.shape, x.strides, y.strides ); - sh = o.sh; - sx = o.sx; - sy = o.sy; - idx = reverse( o.idx ); - - // Determine the block size: - bsize = blockSize( x.dtype, y.dtype ); - - // Cache the indices of the first indexed elements in the respective ndarrays... - ox = x.offset; - oy = y.offset; - - // Cache references to the input and output ndarray buffers... - xbuf = x.data; - ybuf = y.data; - - // Cache offset increments for the innermost loop... - dx0 = sx[0]; - dy0 = sy[0]; - - // Cache accessors: - get = x.accessors[0]; - set = y.accessors[1]; - - // Iterate over blocks... - for ( j8 = sh[8]; j8 > 0; ) { - if ( j8 < bsize ) { - S8 = j8; - j8 = 0; - } else { - S8 = bsize; - j8 -= bsize; - } - ox8 = ox + ( j8*sx[8] ); - oy8 = oy + ( j8*sy[8] ); - for ( j7 = sh[7]; j7 > 0; ) { - if ( j7 < bsize ) { - S7 = j7; - j7 = 0; - } else { - S7 = bsize; - j7 -= bsize; - } - dx8 = sx[8] - ( S7*sx[7] ); - dy8 = sy[8] - ( S7*sy[7] ); - ox7 = ox8 + ( j7*sx[7] ); - oy7 = oy8 + ( j7*sy[7] ); - for ( j6 = sh[6]; j6 > 0; ) { - if ( j6 < bsize ) { - S6 = j6; - j6 = 0; - } else { - S6 = bsize; - j6 -= bsize; - } - dx7 = sx[7] - ( S6*sx[6] ); - dy7 = sy[7] - ( S6*sy[6] ); - ox6 = ox7 + ( j6*sx[6] ); - oy6 = oy7 + ( j6*sy[6] ); - for ( j5 = sh[5]; j5 > 0; ) { - if ( j5 < bsize ) { - S5 = j5; - j5 = 0; - } else { - S5 = bsize; - j5 -= bsize; - } - dx6 = sx[6] - ( S5*sx[5] ); - dy6 = sy[6] - ( S5*sy[5] ); - ox5 = ox6 + ( j5*sx[5] ); - oy5 = oy6 + ( j5*sy[5] ); - for ( j4 = sh[4]; j4 > 0; ) { - if ( j4 < bsize ) { - S4 = j4; - j4 = 0; - } else { - S4 = bsize; - j4 -= bsize; - } - dx5 = sx[5] - ( S4*sx[4] ); - dy5 = sy[5] - ( S4*sy[4] ); - ox4 = ox5 + ( j4*sx[4] ); - oy4 = oy5 + ( j4*sy[4] ); - for ( j3 = sh[3]; j3 > 0; ) { - if ( j3 < bsize ) { - S3 = j3; - j3 = 0; - } else { - S3 = bsize; - j3 -= bsize; - } - dx4 = sx[4] - ( S3*sx[3] ); - dy4 = sy[4] - ( S3*sy[3] ); - ox3 = ox4 + ( j3*sx[3] ); - oy3 = oy4 + ( j3*sy[3] ); - for ( j2 = sh[2]; j2 > 0; ) { - if ( j2 < bsize ) { - S2 = j2; - j2 = 0; - } else { - S2 = bsize; - j2 -= bsize; - } - dx3 = sx[3] - ( S2*sx[2] ); - dy3 = sy[3] - ( S2*sy[2] ); - ox2 = ox3 + ( j2*sx[2] ); - oy2 = oy3 + ( j2*sy[2] ); - for ( j1 = sh[1]; j1 > 0; ) { - if ( j1 < bsize ) { - S1 = j1; - j1 = 0; - } else { - S1 = bsize; - j1 -= bsize; - } - dx2 = sx[2] - ( S1*sx[1] ); - dy2 = sy[2] - ( S1*sy[1] ); - ox1 = ox2 + ( j1*sx[1] ); - oy1 = oy2 + ( j1*sy[1] ); - for ( j0 = sh[0]; j0 > 0; ) { - if ( j0 < bsize ) { - S0 = j0; - j0 = 0; - } else { - S0 = bsize; - j0 -= bsize; - } - // Compute index offsets for the first input and output ndarray elements in the current block... - ix = ox1 + ( j0*sx[0] ); - iy = oy1 + ( j0*sy[0] ); - - // Compute loop offset increments... - dx1 = sx[1] - ( S0*sx[0] ); - dy1 = sy[1] - ( S0*sy[0] ); - - // Iterate over the ndarray dimensions... - for ( i8 = 0; i8 < S8; i8++ ) { - for ( i7 = 0; i7 < S7; i7++ ) { - for ( i6 = 0; i6 < S6; i6++ ) { - for ( i5 = 0; i5 < S5; i5++ ) { - for ( i4 = 0; i4 < S4; i4++ ) { - for ( i3 = 0; i3 < S3; i3++ ) { - for ( i2 = 0; i2 < S2; i2++ ) { - for ( i1 = 0; i1 < S1; i1++ ) { - for ( i0 = 0; i0 < S0; i0++ ) { - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), take( [ j8+i8, j7+i7, j6+i6, j5+i5, j4+i4, j3+i3, j2+i2, j1+i1, j0+i0 ], idx ), x.ref ) ); - ix += dx0; - iy += dy0; - } - ix += dx1; - iy += dy1; - } - ix += dx2; - iy += dy2; - } - ix += dx3; - iy += dy3; - } - ix += dx4; - iy += dy4; - } - ix += dx5; - iy += dy5; - } - ix += dx6; - iy += dy6; - } - ix += dx7; - iy += dy7; - } - ix += dx8; - iy += dy8; - } - } - } - } - } - } - } - } - } - } -} - - -// EXPORTS // - -module.exports = blockedmap9d; diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 80cf80e..0000000 --- a/lib/index.js +++ /dev/null @@ -1,81 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Apply a callback function to the elements in an input ndarray and assign results to the elements in an output ndarray. -* -* @module @stdlib/ndarray-base-map -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* var map = require( '@stdlib/ndarray-base-map' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index ae7bb6b..0000000 --- a/lib/main.js +++ /dev/null @@ -1,278 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var iterationOrder = require( '@stdlib/ndarray-base-iteration-order' ); -var strides2order = require( '@stdlib/ndarray-base-strides2order' ); -var ndarray2object = require( '@stdlib/ndarray-base-ndarraylike2object' ); -var blockedaccessormap2d = require( './2d_blocked_accessors.js' ); -var blockedaccessormap3d = require( './3d_blocked_accessors.js' ); -var blockedaccessormap4d = require( './4d_blocked_accessors.js' ); -var blockedaccessormap5d = require( './5d_blocked_accessors.js' ); -var blockedaccessormap6d = require( './6d_blocked_accessors.js' ); -var blockedaccessormap7d = require( './7d_blocked_accessors.js' ); -var blockedaccessormap8d = require( './8d_blocked_accessors.js' ); -var blockedaccessormap9d = require( './9d_blocked_accessors.js' ); -var blockedaccessormap10d = require( './10d_blocked_accessors.js' ); -var blockedmap2d = require( './2d_blocked.js' ); -var blockedmap3d = require( './3d_blocked.js' ); -var blockedmap4d = require( './4d_blocked.js' ); -var blockedmap5d = require( './5d_blocked.js' ); -var blockedmap6d = require( './6d_blocked.js' ); -var blockedmap7d = require( './7d_blocked.js' ); -var blockedmap8d = require( './8d_blocked.js' ); -var blockedmap9d = require( './9d_blocked.js' ); -var blockedmap10d = require( './10d_blocked.js' ); -var accessormap0d = require( './0d_accessors.js' ); -var accessormap1d = require( './1d_accessors.js' ); -var accessormap2d = require( './2d_accessors.js' ); -var accessormap3d = require( './3d_accessors.js' ); -var accessormap4d = require( './4d_accessors.js' ); -var accessormap5d = require( './5d_accessors.js' ); -var accessormap6d = require( './6d_accessors.js' ); -var accessormap7d = require( './7d_accessors.js' ); -var accessormap8d = require( './8d_accessors.js' ); -var accessormap9d = require( './9d_accessors.js' ); -var accessormap10d = require( './10d_accessors.js' ); -var accessormapnd = require( './nd_accessors.js' ); -var map0d = require( './0d.js' ); -var map1d = require( './1d.js' ); -var map2d = require( './2d.js' ); -var map3d = require( './3d.js' ); -var map4d = require( './4d.js' ); -var map5d = require( './5d.js' ); -var map6d = require( './6d.js' ); -var map7d = require( './7d.js' ); -var map8d = require( './8d.js' ); -var map9d = require( './9d.js' ); -var map10d = require( './10d.js' ); -var mapnd = require( './nd.js' ); - - -// VARIABLES // - -var MAP = [ - map0d, - map1d, - map2d, - map3d, - map4d, - map5d, - map6d, - map7d, - map8d, - map9d, - map10d -]; -var ACCESSOR_MAP = [ - accessormap0d, - accessormap1d, - accessormap2d, - accessormap3d, - accessormap4d, - accessormap5d, - accessormap6d, - accessormap7d, - accessormap8d, - accessormap9d, - accessormap10d -]; -var BLOCKED_MAP = [ - blockedmap2d, // 0 - blockedmap3d, - blockedmap4d, - blockedmap5d, - blockedmap6d, - blockedmap7d, - blockedmap8d, - blockedmap9d, - blockedmap10d // 8 -]; -var BLOCKED_ACCESSOR_MAP = [ - blockedaccessormap2d, // 0 - blockedaccessormap3d, - blockedaccessormap4d, - blockedaccessormap5d, - blockedaccessormap6d, - blockedaccessormap7d, - blockedaccessormap8d, - blockedaccessormap9d, - blockedaccessormap10d // 8 -]; -var MAX_DIMS = MAP.length -1; - - -// MAIN // - -/** -* Applies a callback function to the elements in an input ndarray and assigns results to the elements in an output ndarray. -* -* ## Notes -* -* - Each provided ndarray should be an `object` with the following properties: -* -* - **dtype**: data type. -* - **data**: data buffer. -* - **shape**: dimensions. -* - **strides**: stride lengths. -* - **offset**: index offset. -* - **order**: specifies whether an ndarray is row-major (C-style) or column major (Fortran-style). -* -* @param {ArrayLikeObject} arrays - array-like object containing one input array and one output array -* @param {Callback} fcn - callback function -* @param {*} [thisArg] - callback execution context -* @throws {Error} arrays must have the same number of dimensions -* @throws {Error} arrays must have the same shape -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( z ) { -* return z * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] ); -* var ybuf = new Float64Array( 6 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 3, 1, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 4, 1 ]; -* var sy = [ 2, 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* map( [ x, y ], scale ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ] -*/ -function map( arrays, fcn, thisArg ) { - var ndims; - var shx; - var shy; - var iox; - var ioy; - var len; - var ord; - var x; - var y; - var i; - var d; - - // Unpack the ndarrays and standardize ndarray meta data: - x = ndarray2object( arrays[ 0 ] ); - y = ndarray2object( arrays[ 1 ] ); - - // Verify that the input and output arrays have the same number of dimensions... - shx = x.shape; - shy = y.shape; - ndims = shx.length; - if ( ndims !== shy.length ) { - throw new Error( 'invalid arguments. Arrays must have the same number of dimensions (i.e., same rank). ndims(x) == '+ndims+'. ndims(y) == '+shy.length+'.' ); - } - // Determine whether we can avoid iteration altogether... - if ( ndims === 0 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Verify that the input and output arrays have the same dimensions... - len = 1; // number of elements - for ( i = 0; i < ndims; i++ ) { - d = shx[ i ]; - if ( d !== shy[ i ] ) { - throw new Error( 'invalid arguments. Array must have the same shape.' ); - } - // Note that, if one of the dimensions is `0`, the length will be `0`... - len *= d; - } - // Check whether we were provided empty ndarrays... - if ( len === 0 ) { - return; - } - // Determine whether the ndarrays are one-dimensional and thus readily translate to one-dimensional strided arrays... - if ( ndims === 1 ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, fcn, thisArg ); - } - // Determine iteration order: - iox = iterationOrder( x.strides ); // +/-1 - ioy = iterationOrder( y.strides ); // +/-1 - - // Determine whether we can avoid blocked iteration... - ord = strides2order( x.strides ); - if ( iox !== 0 && ioy !== 0 && ord === strides2order( y.strides ) ) { - // Determine whether we can use simple nested loops... - if ( ndims <= MAX_DIMS ) { - // So long as iteration for each respective array always moves in the same direction (i.e., no mixed sign strides), we can leverage cache-optimal (i.e., normal) nested loops without resorting to blocked iteration... - if ( x.accessorProtocol || y.accessorProtocol ) { - return ACCESSOR_MAP[ ndims ]( x, y, ord === 1, fcn, thisArg ); - } - return MAP[ ndims ]( x, y, ord === 1, fcn, thisArg ); - } - // Fall-through to blocked iteration... - } - // Determine whether we can perform blocked iteration... - if ( ndims <= MAX_DIMS ) { - if ( x.accessorProtocol || y.accessorProtocol ) { - return BLOCKED_ACCESSOR_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - return BLOCKED_MAP[ ndims-2 ]( x, y, fcn, thisArg ); - } - // Fall-through to linear view iteration without regard for how data is stored in memory (i.e., take the slow path)... - if ( x.accessorProtocol || y.accessorProtocol ) { - return accessormapnd( x, y, fcn, thisArg ); - } - mapnd( x, y, fcn, thisArg ); -} - - -// EXPORTS // - -module.exports = map; diff --git a/lib/nd.js b/lib/nd.js deleted file mode 100644 index 379d56e..0000000 --- a/lib/nd.js +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an n-dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Float64Array = require( '@stdlib/array-float64' ); -* -* function scale( x ) { -* return x * 10.0; -* } -* -* // Create data buffers: -* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Float64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 4, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 1; -* var oy = 0; -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'float64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major' -* }; -* var y = { -* 'dtype': 'float64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major' -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* console.log( y.data ); -* // => [ 20.0, 30.0, 60.0, 70.0 ] -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - ybuf[ iy ] = fcn.call( thisArg, xbuf[ ix ], idx, x.ref ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/lib/nd_accessors.js b/lib/nd_accessors.js deleted file mode 100644 index 719fd1e..0000000 --- a/lib/nd_accessors.js +++ /dev/null @@ -1,181 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var numel = require( '@stdlib/ndarray-base-numel' ); -var vind2bind = require( '@stdlib/ndarray-base-vind2bind' ); -var ind2sub = require( '@stdlib/ndarray-base-ind2sub' ); - - -// VARIABLES // - -var MODE = 'throw'; - - -// MAIN // - -/** -* Applies a callback function to elements in an -dimensional input ndarray and assigns results to elements in an equivalently shaped output ndarray. -* -* @private -* @param {Object} x - object containing ndarray meta data -* @param {ndarrayLike} x.ref - reference to the original ndarray-like object -* @param {string} x.dtype - data type -* @param {Collection} x.data - data buffer -* @param {NonNegativeIntegerArray} x.shape - dimensions -* @param {IntegerArray} x.strides - stride lengths -* @param {NonNegativeInteger} x.offset - index offset -* @param {string} x.order - specifies whether `x` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} x.accessors - data buffer accessors -* @param {Object} y - object containing output ndarray meta data -* @param {string} y.dtype - data type -* @param {Collection} y.data - data buffer -* @param {NonNegativeIntegerArray} y.shape - dimensions -* @param {IntegerArray} y.strides - stride lengths -* @param {NonNegativeInteger} y.offset - index offset -* @param {string} y.order - specifies whether `y` is row-major (C-style) or column-major (Fortran-style) -* @param {Array} y.accessors - data buffer accessors -* @param {Callback} fcn - callback function -* @param {*} thisArg - callback execution context -* @returns {void} -* -* @example -* var Complex64Array = require( '@stdlib/array-complex64' ); -* var Complex64 = require( '@stdlib/complex-float32-ctor' ); -* var realf = require( '@stdlib/complex-float32-real' ); -* var imagf = require( '@stdlib/complex-float32-imag' ); -* -* function scale( z ) { -* return new Complex64( realf(z)*10.0, imagf(z)*10.0 ); -* } -* -* // Create data buffers: -* var xbuf = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); -* var ybuf = new Complex64Array( 4 ); -* -* // Define the shape of the input and output arrays: -* var shape = [ 2, 2 ]; -* -* // Define the array strides: -* var sx = [ 2, 1 ]; -* var sy = [ 2, 1 ]; -* -* // Define the index offsets: -* var ox = 0; -* var oy = 0; -* -* // Define getters and setters: -* function getter( buf, idx ) { -* return buf.get( idx ); -* } -* -* function setter( buf, idx, value ) { -* buf.set( value, idx ); -* } -* -* // Create the input and output ndarray-like objects: -* var x = { -* 'ref': null, -* 'dtype': 'complex64', -* 'data': xbuf, -* 'shape': shape, -* 'strides': sx, -* 'offset': ox, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* var y = { -* 'dtype': 'complex64', -* 'data': ybuf, -* 'shape': shape, -* 'strides': sy, -* 'offset': oy, -* 'order': 'row-major', -* 'accessors': [ getter, setter ] -* }; -* -* // Apply the map function: -* mapnd( x, y, scale, {} ); -* -* var v = y.data.get( 0 ); -* -* var re = realf( v ); -* // returns 10.0 -* -* var im = imagf( v ); -* // returns 20.0 -*/ -function mapnd( x, y, fcn, thisArg ) { - var xbuf; - var ybuf; - var ordx; - var ordy; - var len; - var get; - var set; - var idx; - var sh; - var sx; - var sy; - var ox; - var oy; - var ix; - var iy; - var i; - - sh = x.shape; - - // Compute the total number of elements over which to iterate: - len = numel( sh ); - - // Cache references to the input and output ndarray data buffers: - xbuf = x.data; - ybuf = y.data; - - // Cache references to the respective stride arrays: - sx = x.strides; - sy = y.strides; - - // Cache the indices of the first indexed elements in the respective ndarrays: - ox = x.offset; - oy = y.offset; - - // Cache the respective array orders: - ordx = x.order; - ordy = y.order; - - // Cache accessors: - get = x.accessors[ 0 ]; - set = y.accessors[ 1 ]; - - // Iterate over each element based on the linear **view** index, regardless as to how the data is stored in memory... - for ( i = 0; i < len; i++ ) { - ix = vind2bind( sh, sx, ox, ordx, i, MODE ); - iy = vind2bind( sh, sy, oy, ordy, i, MODE ); - idx = ind2sub( sh, sx, 0, ordx, i, MODE ); // return subscripts from the perspective of the ndarray view - set( ybuf, iy, fcn.call( thisArg, get( xbuf, ix ), idx, x.ref ) ); - } -} - - -// EXPORTS // - -module.exports = mapnd; diff --git a/package.json b/package.json index 5182ef8..c1b688b 100644 --- a/package.json +++ b/package.json @@ -3,31 +3,8 @@ "version": "0.0.0", "description": "Apply a callback to elements in an input ndarray and assign results to elements in an output ndarray.", "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,70 +13,6 @@ "bugs": { "url": "https://github.com/stdlib-js/stdlib/issues" }, - "dependencies": { - "@stdlib/array-base-reverse": "^0.2.2", - "@stdlib/array-base-take-indexed": "^0.2.2", - "@stdlib/array-base-zero-to": "^0.2.1", - "@stdlib/ndarray-base-ind2sub": "^0.2.2", - "@stdlib/ndarray-base-iteration-order": "^0.2.2", - "@stdlib/ndarray-base-ndarraylike2object": "^0.2.2", - "@stdlib/ndarray-base-numel": "^0.2.2", - "@stdlib/ndarray-base-strides2order": "^0.2.2", - "@stdlib/ndarray-base-unary-loop-interchange-order": "^0.2.1", - "@stdlib/ndarray-base-unary-tiling-block-size": "^0.2.2", - "@stdlib/ndarray-base-vind2bind": "^0.2.2", - "@stdlib/types": "^0.4.3", - "@stdlib/error-tools-fmtprodmsg": "^0.2.2" - }, - "devDependencies": { - "@stdlib/array-complex128": "^0.3.0", - "@stdlib/array-filled": "^0.2.1", - "@stdlib/array-filled-by": "^0.2.1", - "@stdlib/array-float64": "^0.2.2", - "@stdlib/array-ones": "^0.2.1", - "@stdlib/array-typed-complex-ctors": "^0.2.2", - "@stdlib/array-zeros": "^0.2.2", - "@stdlib/assert-is-same-complex128array": "^0.2.2", - "@stdlib/assert-is-same-float64array": "^0.2.2", - "@stdlib/blas-ext-base-dfill": "^0.2.2", - "@stdlib/blas-ext-base-gfill": "^0.2.1", - "@stdlib/complex-float64-ctor": "^0.0.3", - "@stdlib/complex-float64-imag": "^0.1.1", - "@stdlib/complex-float64-real": "^0.1.1", - "@stdlib/math-base-assert-is-nan": "^0.2.2", - "@stdlib/math-base-special-abs": "^0.2.2", - "@stdlib/math-base-special-cbrt": "^0.2.2", - "@stdlib/math-base-special-floor": "^0.2.3", - "@stdlib/math-base-special-pow": "^0.3.0", - "@stdlib/math-base-special-sqrt": "^0.2.2", - "@stdlib/ndarray-base-shape2strides": "^0.2.2", - "@stdlib/ndarray-base-strides2offset": "^0.2.2", - "@stdlib/ndarray-base-to-array": "^0.2.1", - "@stdlib/ndarray-ctor": "^0.2.2", - "@stdlib/ndarray-from-scalar": "^0.2.1", - "@stdlib/number-float64-base-identity": "github:stdlib-js/number-float64-base-identity#main", - "@stdlib/random-base-discrete-uniform": "^0.2.1", - "@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", "base", @@ -113,9 +26,8 @@ "transform", "for-each" ], - "__stdlib__": {}, "funding": { "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..ad3a6dd --- /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.0d.js b/test/test.0d.js deleted file mode 100644 index 1648cc8..0000000 --- a/test/test.0d.js +++ /dev/null @@ -1,89 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var scalar2ndarray = require( '@stdlib/ndarray-from-scalar' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( 1.0, { - 'dtype': 'float64' - }); - y = scalar2ndarray( 0.0, { - 'dtype': 'float64' - }); - - map( [ x, y ], scale ); - - expected = new Float64Array( [ 10.0 ] ); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 0-dimensional ndarray and assigns results to the elements in an output 0-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = scalar2ndarray( new Complex128( 1.0, 1.0 ), { - 'dtype': 'complex128' - }); - y = scalar2ndarray( new Complex128( 0.0, 0.0 ), { - 'dtype': 'complex128' - }); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ 10.0, 10.0 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.10d.js b/test/test.10d.js deleted file mode 100644 index 74b3998..0000000 --- a/test/test.10d.js +++ /dev/null @@ -1,2667 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 9 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ 32, 16, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, 32, 16, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*32, 16, -8, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, bsize*64, bsize*32, -16, 8, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*16, 8, 4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*32, bsize*32, bsize*32, -bsize*32, bsize*16, 8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*16, - -8, - 4, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ - bsize*64, - bsize*64, - bsize*32, - -bsize*32, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ - bsize*32, - bsize*32, - bsize*16, - -bsize*16, - bsize*8, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 9 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -1, -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - -bsize*8, - bsize*8, - bsize*16, - bsize*16, - -bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ - 2, - 4, - 4, - 8, - bsize*16, - bsize*32, - bsize*32, - bsize*64, - bsize*64, - bsize*64 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 2, bsize*2, 2, 1 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 32, bsize*64, bsize*128 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, 16, 16, 32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 10-dimensional ndarray and assigns results to the elements in an output 10-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 1, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 16, -16, 16, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.1d.js b/test/test.1d.js deleted file mode 100644 index 21e0604..0000000 --- a/test/test.1d.js +++ /dev/null @@ -1,134 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 4 ], [ 2 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (empty array)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 8, 'float64' ), [ 0 ], [ 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 1-dimensional ndarray and assigns results to the elements in an output 1-dimensional ndarray (accessors)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'complex128', ones( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - y = ndarray( 'complex128', zeros( 6, 'complex128' ), [ 4 ], [ 1 ], 1, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.2d.js b/test/test.2d.js deleted file mode 100644 index 3e94e94..0000000 --- a/test/test.2d.js +++ /dev/null @@ -1,1195 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 1 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2 ]; - st = [ 4, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 1 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0, - 11.0, - 5.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )+10.0, imag( z )+5.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0 ], [ 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ -1, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2 ]; - st = [ 1, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2 ]; - st = [ 2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 2-dimensional ndarray and assigns results to the elements in an output 2-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2 ]; - st = [ -2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( x.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.3d.js b/test/test.3d.js deleted file mode 100644 index 07f7516..0000000 --- a/test/test.3d.js +++ /dev/null @@ -1,1331 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 10.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ bsize*8, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 2 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 2 ]; - st = [ -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ 3, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2 ]; - st = [ -3, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ -8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2 ]; - st = [ -bsize*8, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 2 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0 ], [ 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ -1, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 2 ]; - st = [ -1, -2, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, 2, 3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2 ]; - st = [ 1, -2, -3 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 6, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 6, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2 ]; - st = [ 2, -2, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 3-dimensional ndarray and assigns results to the elements in an output 3-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2 ]; - st = [ 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.4d.js b/test/test.4d.js deleted file mode 100644 index 8864e09..0000000 --- a/test/test.4d.js +++ /dev/null @@ -1,1503 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ -2, -2, -1, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ bsize*8, bsize*4, -2, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ bsize*8, bsize*4, bsize*4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 3 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, 2, 1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 4, -2, -1, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ -4, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 2, 1 ]; - st = [ -bsize*8, -4, 2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ -bsize*4, bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2 ]; - st = [ -bsize*4, bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 3 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0 ], [ 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, 1, bsize*2 ]; - st = [ 2, 2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 1 ]; - st = [ 2, 2, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 1, bsize*2, 1, 2 ]; - st = [ 2, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2 ]; - st = [ -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1 ]; - st = [ 1, 2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 8, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 8, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1 ]; - st = [ 2, -bsize*4, -bsize*4, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1 ]; - st = [ 1, 2, -bsize*4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1 ]; - st = [ 2, 4, -4, -bsize*4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 4-dimensional ndarray and assigns results to the elements in an output 4-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*4 ]; - st = [ 2, 4, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.5d.js b/test/test.5d.js deleted file mode 100644 index 16f3119..0000000 --- a/test/test.5d.js +++ /dev/null @@ -1,1740 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -8, -4, -4, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -2, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 4 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, 2, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 8, 4, -2, -2, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ 8, -8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -4, 4, -4, -2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, bsize*8, -4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, -bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 4 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 2 ]; - st = [ -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2 ]; - st = [ -2, 4, -bsize*8, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, 4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ -2, 4, -4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2 ]; - st = [ 1, 2, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2 ]; - st = [ -2, bsize*4, -bsize*4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1 ]; - st = [ -2, 4, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2 ]; - st = [ -2, 4, -4, bsize*8, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2 ]; - st = [ -2, -4, -4, 4, bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 5-dimensional ndarray and assigns results to the elements in an output 5-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2 ]; - st = [ 2, 4, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.6d.js b/test/test.6d.js deleted file mode 100644 index 41fef40..0000000 --- a/test/test.6d.js +++ /dev/null @@ -1,1892 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, -16, 8, -4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 5 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, 4, 4, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 8, -4, -4, -1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 8, -8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ bsize*8, -4, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ bsize*8, -bsize*8, -4, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 1, bsize*2, 2 ]; - st = [ bsize*8, -bsize*8, -bsize*8, bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ bsize*8, -bsize*8, -bsize*4, bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 5 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ -1, -1, -1, -2, -4, -4 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, -2, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 12, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 12, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2 ]; - st = [ 2, 4, bsize*8, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, -bsize*8, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, -4, bsize*8, -bsize*8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 1 ]; - st = [ 2, 4, 4, -4, 8, -bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 6-dimensional ndarray and assigns results to the elements in an output 6-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2 ]; - st = [ 2, 4, 4, -8, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.7d.js b/test/test.7d.js deleted file mode 100644 index 8a3a7fe..0000000 --- a/test/test.7d.js +++ /dev/null @@ -1,2099 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, 8, -4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 1, 2 ]; - st = [ bsize*16, -8, 8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 6 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -8, -8, -4, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -16, 16, -16, -8, 4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 16, -16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ bsize*16, -8, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ bsize*16, -bsize*16, 8, 8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, 4, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, 1, bsize*2, 2 ]; - st = [ bsize*16, -bsize*16, bsize*16, bsize*8, -bsize*8, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ bsize*16, -bsize*16, bsize*8, bsize*8, -bsize*4, bsize*4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 6 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, -1, 2, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, bsize*4, bsize*8, -bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 2, 1, 2, 1 ]; - st = [ 2, -4, bsize*8, bsize*8, -bsize*16, bsize*16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 1, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 1, 2, 1, 2, 1, 2 ]; - st = [ -1, -2, -2, -4, -4, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 2, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, -2, 4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 2, 1, 2 ]; - st = [ 2, -bsize*4, -bsize*4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, -bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, -4, -4, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 1, 2, 2 ]; - st = [ 2, -4, -4, 4, bsize*8, bsize*8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 1, 2 ]; - st = [ 2, -4, -4, 8, 8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2 ]; - st = [ 2, -4, -4, 8, 8, 8, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 7-dimensional ndarray and assigns results to the elements in an output 7-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, bsize*2 ]; - st = [ 2, -4, -4, 8, 8, 16, 16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.8d.js b/test/test.8d.js deleted file mode 100644 index 2dc6333..0000000 --- a/test/test.8d.js +++ /dev/null @@ -1,2221 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, -16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 7 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 2 ]; - st = [ 32, 16, 8, -8, -8, 4, 4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 2 ]; - st = [ -bsize*32, -16, 8, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, bsize*2, 2, 1, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, 16, -8, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, bsize*2, 2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*32, -16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, bsize*2, 2, 1, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, bsize*2, 2, 2 ]; - st = [ -bsize*32, -bsize*32, bsize*16, -bsize*16, -bsize*16, 8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, bsize*2, 2 ]; - st = [ -bsize*16, -bsize*16, bsize*8, -bsize*8, -bsize*8, bsize*8, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 1, bsize*2 ]; - st = [ - -bsize*16, - -bsize*16, - bsize*8, - -bsize*8, - -bsize*8, - bsize*4, - -bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 7 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = [ -1, -1, -1, -1, -2, -4, -4, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 1, 2, 1, 1, 2, 1, 2 ]; - st = [ 2, bsize*4, bsize*4, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 1, 1, 1, 2, 1, 2 ]; - st = [ 2, -4, bsize*8, bsize*8, bsize*8, bsize*8, bsize*16, bsize*16 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 1, 1, 2, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 1, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, 16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 8-dimensional ndarray and assigns results to the elements in an output 8-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.9d.js b/test/test.9d.js deleted file mode 100644 index 2a38c2e..0000000 --- a/test/test.9d.js +++ /dev/null @@ -1,2447 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var dfill = require( '@stdlib/blas-ext-base-dfill' ); -var gfill = require( '@stdlib/blas-ext-base-gfill' ); -var blockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'row-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 1, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 8 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ -8, -8, -8, -8, -8, -4, -2, -2, -1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ 32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ bsize*32, -16, -8, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*32, -16, 8, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, 16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*16, 8, -4, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ bsize*64, -bsize*64, -bsize*32, bsize*32, bsize*16, -8, 4, -4, 2 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ - bsize*64, - -bsize*64, - -bsize*32, - bsize*32, - bsize*32, - -bsize*16, - 8, - -4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*16, - -bsize*16, - bsize*8, - 4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (row-major, non-contiguous, large arrays, accessors', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, 1, 1, 2, bsize*2 ]; - st = [ - -bsize*32, - -bsize*32, - -bsize*16, - bsize*16, - bsize*8, - -bsize*8, - bsize*8, - bsize*4, - 2 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 8 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 4 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, empty)', function test( t ) { - var expected; - var x; - var y; - - x = ndarray( 'float64', ones( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - y = ndarray( 'float64', zeros( 4, 'float64' ), [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 0, 'column-major' ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array( y.length*2 ); - dfill( y.length, 10.0, expected, st[ 0 ] ); - - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 2, 2, 1, 2, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, contiguous, negative strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 2, 2, 1, 2, 1, 1, 1, 1, 1 ]; - st = [ -1, -2, -4, -4, -8, -8, -8, -8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ bsize*2, 2, 2, 1, 1, 2, 1, 1, 2 ]; - st = [ - 2, - bsize*4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*32, - bsize*32, - bsize*32 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, bsize*2, 2, 1, 1, 1, 1, 1, 2 ]; - st = [ - 2, - 4, - bsize*8, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16, - bsize*16 - ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 2, bsize*2, 2, 1, 1, 1, 1, 2 ]; - st = [ 2, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32, bsize*32 ]; // eslint-disable-line max-len - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, bsize*2, 2, 1, 1, 1, 2 ]; - st = [ 2, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 1, 2, bsize*2, 2, 1, 1, 2 ]; - st = [ 2, 4, 4, 4, 8, bsize*16, bsize*32, bsize*32, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 2, bsize*2, 2, 1, 2 ]; - st = [ 2, 4, 4, 8, 8, 16, bsize*32, bsize*64, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 2, bsize*2, 2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 16, bsize*32, bsize*64 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, bsize*2, 2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, bsize*32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element in an input 9-dimensional ndarray and assigns results to the elements in an output 9-dimensional ndarray (column-major, non-contiguous, large arrays, accessors)', function test( t ) { - var expected; - var bsize; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - - bsize = blockSize( dt ); - sh = [ 2, 1, 2, 1, 1, 1, 2, 2, bsize*2 ]; - st = [ 2, 4, 4, 8, 8, 8, 8, 16, 32 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh )*2, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh )*2, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( y.length*2 ); - gfill( y.length, new Complex128( 10.0, 0.0 ), expected, st[ 0 ] ); - - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 5512e2c..0000000 --- a/test/test.js +++ /dev/null @@ -1,139 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same number of dimensions', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2 ] ], - [ [ 2, 2 ], [ 2, 2, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ], - [ [ 2, 2, 1, 2 ], [ 2, 1, 2 ] ], - [ [ 1, 1, 4, 2, 2, 2 ], [ 10, 2 ] ], - [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); - -tape( 'the function throws an error if provided input and output ndarrays which do not have the same shape', function test( t ) { - var shapes; - var i; - - shapes = [ - [ [ 4, 2, 1 ], [ 4, 2, 2 ] ], - [ [ 3, 3 ], [ 2, 2 ] ], - [ [ 5, 5, 5 ], [ 5, 5, 4 ] ], - [ [ 1, 1, 1 ], [ 2, 2, 2 ] ], - [ [ 1, 4, 1, 2, 2 ], [ 3, 8 ] ], - [ [ 10, 2, 1 ], [ 1, 2, 10 ] ] - ]; - - for ( i = 0; i < shapes.length; i++ ) { - t.throws( badValue( shapes[i][0], shapes[i][1] ), Error, 'throws an error when input shape is ' + shapes[i][0] + ' and output shape is ' + shapes[i][1] ); - } - t.end(); - - function scale( z ) { - return z * 10.0; - } - - function badValue( sh1, sh2 ) { - return function badValue() { - var dtype; - var ord; - var st1; - var st2; - var o1; - var o2; - var x; - var y; - - ord = 'row-major'; - dtype = 'float64'; - - st1 = shape2strides( sh1, ord ); - st2 = shape2strides( sh2, ord ); - o1 = strides2offset( sh1, st1 ); - o2 = strides2offset( sh2, st2 ); - - x = ndarray( dtype, ones( numel( sh1 ), dtype ), sh1, st1, o1, ord ); - y = ndarray( dtype, zeros( numel( sh2 ), dtype ), sh2, st2, o2, ord ); - - map( [ x, y ], scale ); - }; - } -}); diff --git a/test/test.nd.js b/test/test.nd.js deleted file mode 100644 index 9e4b18d..0000000 --- a/test/test.nd.js +++ /dev/null @@ -1,822 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2024 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameComplex128Array = require( '@stdlib/assert-is-same-complex128array' ); -var isSameFloat64Array = require( '@stdlib/assert-is-same-float64array' ); -var Complex128Array = require( '@stdlib/array-complex128' ); -var Float64Array = require( '@stdlib/array-float64' ); -var zeros = require( '@stdlib/array-zeros' ); -var ones = require( '@stdlib/array-ones' ); -var Complex128 = require( '@stdlib/complex-float64-ctor' ); -var real = require( '@stdlib/complex-float64-real' ); -var imag = require( '@stdlib/complex-float64-imag' ); -var ndarray = require( '@stdlib/ndarray-ctor' ); -var shape2strides = require( '@stdlib/ndarray-base-shape2strides' ); -var strides2offset = require( '@stdlib/ndarray-base-strides2offset' ); -var numel = require( '@stdlib/ndarray-base-numel' ); -var map = require( './../lib' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof map, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, 16, 16, 8, 4, 2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (row-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'row-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 16, 16, 16, 16, 16, 16, -16, 16, -8, -4, -2, 1 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, singleton dimensions, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0, - 10.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset(sh, st); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape('the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'float64'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, -1, -4, 8, -8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Float64Array([ - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0, - 10.0, - 10.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameFloat64Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return z * 10.0; - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, contiguous, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = shape2strides( sh, ord ); - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( numel( sh ), dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( numel( sh ), dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array( [ - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0 - ] ); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, same sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -}); - -tape( 'the function applies a callback to each indexed element of an input n-dimensional ndarray and assigns results to the elements in an output n-dimensional ndarray (column-major, non-contiguous, mixed sign strides, accessors)', function test( t ) { - var expected; - var ord; - var sh; - var st; - var dt; - var o; - var x; - var y; - - dt = 'complex128'; - ord = 'column-major'; - sh = [ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2 ]; - st = [ 1, 1, 1, 1, -1, 1, -1, 1, 1, -4, -8, 8 ]; - o = strides2offset( sh, st ); - - x = ndarray( dt, ones( 16, dt ), sh, st, o, ord ); - y = ndarray( dt, zeros( 16, dt ), sh, st, o, ord ); - - map( [ x, y ], scale ); - - expected = new Complex128Array([ - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 10.0, - 0.0, - 10.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ]); - t.strictEqual( isSameComplex128Array( y.data, expected ), true, 'returns expected value' ); - - t.end(); - - function scale( z ) { - return new Complex128( real( z )*10.0, imag( z )*10.0 ); - } -});